定义实体类型:

定义两个实体Menu和MenuCard,一个menu关联一个menucard,menucard包含对所有menu的引用。

 public class Menu
{
public int Id { get; set; } [StringLength(50)]
public string Text { get; set; }
public decimal Price { get; set; }
public DateTime? Date { get; set; }
public MenuCard MenuCard { get; set; }
public int MenuCardId { get; set; }
}

  

public class MenuCard
{
public int Id { get; set; }
public string Text { get; set; }
public virtual ICollection<Menu> Menus { get; set; }
}

  创建数据上下文,新建类MenuContext派生于基类DbContext,使用模型构建器定义各个字段的约束和各表之间的级联关系,需要引用EntityFramework程序集。

 public class MenuContext:DbContext
{
public MenuContext():base(GetConnectionString())
{
} /// <summary>
/// Get the connection string to connect database
/// </summary>
/// <returns>connection string</returns>
private static string GetConnectionString()
{
ConnectionStringSettings settings = ConfigurationManager.ConnectionStrings["CodeFirst"];
return settings.ConnectionString;
} public DbSet<Menu> Menus { get; set; }
public DbSet<MenuCard> MenuCards { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Menu>().Property(m => m.Price).HasColumnType("money");
modelBuilder.Entity<Menu>().Property(m => m.Date).HasColumnType("date");
modelBuilder.Entity<Menu>().Property(m => m.Text).HasMaxLength(40).IsRequired();
modelBuilder.Entity<Menu>().HasRequired(m => m.MenuCard).WithMany(c => c.Menus).HasForeignKey(m => m.MenuCardId);
modelBuilder.Entity<MenuCard>().Property(c => c.Text).HasMaxLength(30).IsRequired();
modelBuilder.Entity<MenuCard>().HasMany(c => c.Menus).WithRequired().WillCascadeOnDelete();
}
}

  创建数据库,填充数据。数据库初始化实现了IDatabaseInitializer<TContext>接口,这个接口由CreateDatabaseIfNotExists、DropDatabaseAlways和DropDatabaseIfModelChanges实现,新建类MenuCardInitializer

public class MenuCardsInitializer:DropCreateDatabaseAlways<MenuContext>
{
protected override void Seed(MenuContext context)
{
var menuCards = new List<MenuCard>()
{
new MenuCard {
Text ="Soups",Menus=new List<Menu>(){
new Menu {
Text = "Baked Potatoe Soup",Price=4.80m,Date=DateTime.Parse("5/22/2016",System.Globalization.CultureInfo.InvariantCulture)
},
new Menu {
Text="Rib Eye Steak",Price=5.20m,Date=DateTime.Parse("5/21/2016",System.Globalization.CultureInfo.InvariantCulture)
}
}
},
new MenuCard {
Text ="Steaks",Menus=new List<Menu>() {
new Menu {
Text="New York Sirloin Steak",
Price=6.28m,Date=DateTime.Parse("5/20/2016",System.Globalization.CultureInfo.InvariantCulture)},
new Menu {
Text="Rib Eye Steak",Price=7.20m,Date=DateTime.Parse("5/19/2016",System.Globalization.CultureInfo.InvariantCulture)}
}
}
};
menuCards.ForEach(c => context.MenuCards.Add(c));
}
}

  在program类中运行:

class Program
{
static void Main(string[] args)
{ //CreateMenus().Wait();
QueryMenu();
} /// <summary>
/// crwate data to test entity framework
/// </summary>
/// <returns></returns>
private static async Task CreateMenus()
{
using (var data = new MenuContext())
{
MenuCard card = data.MenuCards.Create();
card.Text = "Soups";
data.MenuCards.Add(card);
Menu m = data.Menus.Create();
m.Text = "Baked Potato Soup";
m.Price = 4.80m;
m.Date = new DateTime(2016, 5, 22);
m.MenuCard = card;
data.Menus.Add(m);
Menu m1 = data.Menus.Create();
m1.Text = "Cheddar Broccoli Soup";
m1.Price = 5.06m;
m1.Date = new DateTime(2016, 5, 21);
m1.MenuCard = card;
data.Menus.Add(m1);
try
{
data.SaveChanges();
}
catch(Exception ex)
{
Console.WriteLine(ex.Message);
}
}
} private static void QueryMenu()
{
using (var data = new MenuContext())
{
foreach (var card in data.MenuCards)
{
Console.WriteLine(card.Text);
foreach (var menu in card.Menus)
{
Console.WriteLine("{0}-{1:d}", menu.Text, menu.Date);
}
}
}
}
}

  

C# CodeFirst编程模型一的更多相关文章

  1. JS魔法堂:深究JS异步编程模型

    前言  上周5在公司作了关于JS异步编程模型的技术分享,可能是内容太干的缘故吧,最后从大家的表情看出"这条粉肠到底在说啥?"的结果:(下面是PPT的讲义,具体的PPT和示例代码在h ...

  2. 多线程之异步编程: 经典和最新的异步编程模型,async与await

    经典的异步编程模型(IAsyncResult) 最新的异步编程模型(async 和 await) 将 IAsyncInfo 转换成 Task 将 Task 转换成 IAsyncInfo 示例1.使用经 ...

  3. 多线程之异步编程: 经典和最新的异步编程模型, IAsyncInfo 与 Task 相互转换

    经典的异步编程模型(IAsyncResult) 最新的异步编程模型(async 和 await) 将 IAsyncInfo 转换成 Task 将 Task 转换成 IAsyncInfo 示例1.使用经 ...

  4. jQuery插件编写及链式编程模型小结

    JQuery极大的提高了我们编写JavaScript的效率,让我们可以愉快的编写代码,做出各种特效.大多数情况下,我们都是使用别人开发的JQuery插件,今天我们就来看看如何把我们常用的功能做出JQu ...

  5. 云巴:基于MQTT协议的实时通信编程模型

    概要 有人常问,云巴实时通信系统到底提供了一种怎样的服务,与其他提供推送或 IM 服务的厂商有何本质区别.其实,从技术角度分析,云巴与其它同类厂商都是面向开发者的通信服务,宏观的编程模型都是大同小异, ...

  6. 第3章 窗口与消息_3.1Windows编程模型

    第3章窗口与消息 3.1 Windows_编程模型 (1)窗口程序的运行过程   ①设计窗口   ②注册窗口类(RegisterClassEx).在注册之前,要先填写RegisterClassEx的参 ...

  7. MFC-01-Chapter01:Hello,MFC---1.1 Windows 编程模型

    1.1 Windows编程模型 为传统的操作系统编写的程序使用的是过程化模型,即程序从头到尾按顺序执行.例如C程序,从main函数入口开始执行,中间调用不同的函数一直到程序结束返回,这种过程是程序本身 ...

  8. 金蝶 K/3 Cloud 服务端控件编程模型

    如下图是服务端已有的控件编程模型

  9. 谈谈c#中异步编程模型的变迁

    大家在编程过程中都会用到一些异步编程的情况.在c#的BCL中,很多api都提供了异步方法,初学者可能对各种不同异步方法的使用感到迷惑,本文主要为大家梳理一下异步方法的变迁以及如何使用异步方法. Beg ...

随机推荐

  1. 快速记录 IE8 下三个问题

    快速记录 IE8 下三个问题 昨天 pc 端网站上灰度,发现多个在 IE8 下的问题,描述和解决方案如下: 第一个问题是 css 文件过大 现象 把项目所有的 css 打包成单个文件,在现代的浏览器下 ...

  2. Linux下自动备份MySQL

    使用expect和mysqldump备份 expect expect是一个免费的编程工具语言,用来实现自动和交互式任务进行通信,而无需人的干预. 例如,执行shell脚本的过程中,需要输入用户名.密码 ...

  3. 每天一个Linux命令(10)--cat命令

    --首先,恭喜你,这是第十个命令啦. --为啥第十个就要恭喜?没啥特别呀? --因为逢十进一啊! cat命令的用途是连接文件或标准输入并打印.这个命令常用来显示文件内容,或者将几个文件连接起来显示,或 ...

  4. 原生js和jquery实现图片轮播特效(转)

    本文给大家分享的是使用原生JS和JQ两种方法分别实现相同的图片轮播特效,十分的实用,也非常方便大家对比学习原生js和jQuery,有需要的小伙伴可以参考下. 1)首先是页面的结构部分对于我这种左右切换 ...

  5. Hibernate 迫切连接和普通连接的区别

    package com.baidu.test; import java.util.ArrayList;import java.util.LinkedHashSet;import java.util.L ...

  6. java基础之路(一)

    Java数据类型分为内置类型和扩展类型两大类,其中的内置类型就是基本数据类型,而扩展类型则是Java语言根据基本类型扩展出的其他类型(也叫引用类型)(如:class,String等).本文主要讨论的是 ...

  7. 版本管理工具 —— SVN

    想想我们在开发过程中是不是会遇到这样的情况: 今天写了很长的一段代码,觉得不合理,然后删了,第二天突然发现昨天的那段代码才是正确的,那怎么办,也无法撤销删除的代码? 还有团队中多人共同开发一个项目,如 ...

  8. iOS程序进入后台,延迟指定时间退出

    程序进入后台,延迟指定时间退出 正常程序退出后,会在几秒内停止工作:要想申请更长的时间,需要用到beginBackgroundTaskWithExpirationHandlerendBackgroun ...

  9. [读书系列] 深度探索C++对象模型 初读

    2012年底-2014年初这段时间主要用C++做手游开发,时隔3年,重新拿起<深度探索C++对象模型>这本书,感觉生疏了很多,如果按前阵子的生疏度来说,现在不借助Visual Studio ...

  10. 《jQuery实战(第二版)》读书笔记

    第一部分 jQuery核心 1.jQuery基础 第一章总结了jquery的大致功能,基本原理,使用方式. point: (1).引入:<script type="text/javas ...