ModelFirst就是先设计实体数据类型,然后根据设计的数据类型,生成数据库表
1.新建项--ADO.NET实体数据模型--空数据模型--进入模型设计器(点击xxx.edmx文件也能进入设计器)。
2.从工具箱中,拖一个数据模型(或右击,添加实体,注意,“实体名称”和“实体集“不要留有中文)--右击新建属性。
*实体名称就是数据对象类的名称,实体集就是对应表名的名称
*新建的属性,按F4能迅速打开属性设置,能设置是否为NULL,默认值,数据类型等等。
*如果设置为默认值,那么在实体类的构造函数中,会给属性赋初值。
*新建一个实体,对应就是新建一个数据表
3.右击,添加关联,能设置“一对多关系”,那么,将来在写代码的时候,假如Model1为一,Model2为多,
就可以 : Model1.model2的方式,来访问表2的内容了
*在数据模型上,就表现为:
Model1中,多了一个名字为Model2的属性,而Model2中,就多了类型为Model1的属性。
***而看C#代码,就表型为:
Model1中,除了自己的固有属性外,多了 public virtual ICollectoin<Model2> Model2{get;set;}
Model2中,除了自己的固有的属性外,多了 public int ModelID{get;set;}和
public virtual Model1 Model1{get;set;};
***而从数据库表的设计来看,就是主键和外键的关系。
4.可根据模型生成SqlServer数据库,在模型设计器中,右击“根据模型生成数据库”。
(在创建数据库时,要选择“是,在连接字符串中包括敏感数据”,不然就要自己填账号密码了)
5.在第4步之后,就会生成XXXModel.edmx.sql文件,右击“执行”,就执行sql语句,创建数据库和表了。
**插入操作
var dbContext = new XXXModelContainer();
//往Model1表中添加mdel1
var model1 = new Model1();
dbContext.Model1.Add(model1);
//往model2表中添加model2
var model2 = new Model2();
dbContext.Model2.add(model2);
var model2_ = new Model2();
dbContext.Model2.add(model2_);
//使model1和两个model2关联
model1.Model2.add(model2);
model1.Model2.add(model2_);
//保存,执行Sql
dbContext.SaveChange();
***修改操作
var model1 = new Model1();
model.ID = 1;//ID一定要对,要是ID为主键了话,如果不知道ID,那么就不能New,要查找到对象;
model.属性1= value1;//
dbContext.Entry(model1).State = EntityState.Modified;//要修改此对象
dbContext.Entry(model1).Property(m=>m.属性1).IsModified = true;//要修改此对象的属性1
dbContext.SaveChange();
***查询操作
var findModel1 = from m in dbContext.Model1
where m.属性1 = value
select m ;
//实事上,执行完此行,并不会马上查询,要使用到findMode1这个变量时才会执行Sql语句去查询
**在查询Model1时,也会查询model1.Model2,并还原为对象。
***
使用
foreach ( var m1 in findModel1)//查询了一次sql语句,将符合属性1 = value的Model1对象查出来遍历
{
foreach(var m2 in m1.Model2)//每次遍历,都会查询一次sql语句 , 根据model2. model1ID == m1.ID来查,
所以Model1.Model2要写成ICollection<Model2>,而不是List<>,因为要执行sql语句的
{
}
}