一、前言
在前文中我们介绍了DBFirst,它要求要现有数据库, 然后通过EF映射创建实体。非常简单易学。下面给大家介绍另外一种——ModelFirst,实体优先。
二、内容介绍
Model First 是先利用某些工具(如VS的EF设计器)设计出可视化的实体数据模型及他们之间的关系,然后再根据这些实体、关系去生成数据库对象及相关代码文件。
通过实战演练来更好的展示:
三、实战演练
首先打开VS2012 ,选择控制台程序:
图一 选择控制台程序
- 1
- 2
第一步 添加实体
然后在项目中添加ADO实体模型:
图二 选择ADO实体模型
- 1
- 2
图三 选择ADO实体模型
- 1
- 2
选择模型类型: 这里我们选择“空EF设计器模型”,有的版本也叫做“空模型”。
图四 选择模型类型
- 1
- 2
点击完成后,生成的界面:
图五 生成的界面
- 1
- 2
在模型设计视图中,添加新实体:
图六 添加新实体
- 1
- 2
图七 添加新实体
- 1
- 2
图八 添加新实体
- 1
- 2
添加实体的属性,属性分为三种:标量属性,导航属性,复杂属性。这三种属性会在下文给大家介绍。这里我们使用标量属性,生成新属性后,选中属性,点击F4,可以设置内容。
图九 设置属性
- 1
- 2
按照同样的方法,再创建一个实体。
图十 再创建一个实体
- 1
- 2
接下来添加二者之间的关系,“user”和“card”是一对多的关系。 右击user,点击新增,关联。
图十一 添加关系
- 1
- 2
选择合适的关系:
图十二 选择合适的关系
- 1
- 2
添加完关系后的效果图:
图十三 关系后的效果图
- 1
- 2
第二步 根据模型生成数据库
确保数据库中已经存在一个空白数据库,这里我用代码建立了一个空的数据库,名字叫做EFModelFirst。
图十四 空白数据库
- 1
- 2
下面就需要生成到数据库了,在模型设计视图空白处选择“根据模型生成到数据库…”:
图十五 根据模型生成到数据库
- 1
- 2
相信大家对这个界面不陌生吧!
图十六 根据模型生成到数据库
- 1
- 2
图十七 选择数据库数据库
- 1
- 2
图十八 添加链接字符串
- 1
- 2
图十九 选择EF模型
- 1
- 2
生成数据库向导:
图二十 生成数据库向导
- 1
- 2
然后再点击完成即可,看到生成的Sql脚本:
图二十一 生成数据库SQL脚本
- 1
- 2
在空白处点击右键,选择执行,生成数据库:
图二十二 执行,生成数据库
- 1
- 2
第三步 增删改查
在类中写如下代码:
class Program
{
static void Main(string[] args)
{
//1.声明上下文
MshengModelFirstModelContainer container = new MshengModelFirstModelContainer();
//2.实例化实体
user u = new user();
u.Id = 2;
u.Name = "msheng";
u.CreateDate = DateTime.Now;
//3.实体附加到上下文
container.userSet.Attach(u);
//4.添加到数据库
container.Entry(u).State = EntityState.Added;
//保存
container.SaveChanges();
card c = new card();
c.Id = 1;
c.cash = "sheng";
c.CreateUserId = 1;
c.userId = 1;//关联时,自动生成的一个东西
container.cardSet.Attach(c);
container.Entry(c).State = EntityState.Added;
container.SaveChanges();
card cdc = new card();
//linq
var tiems = from s in container.userSet select s;
foreach(var item in tiems)
{
Console.WriteLine($"{item.Name}");
}
//lambda
var items = container.cardSet.Where<card>(n => n.userId == 1).FirstOrDefault();
Console.WriteLine($"{items.Id}");
Console.ReadKey();
}
}
执行结果:
四、小结
通过这次的介绍,我们知道了可以通过Model实体来创建数据库,非常好的选择,希望能给大家带来帮助。下一篇会向大家介绍CodeFirst。