首页 > 代码库 > ModelFirst开发

ModelFirst开发

首先介绍一下ModelFirst开发方式,什么时候才用呢!在没有数据库时,可以借助EF设计模型,然后根据模型同步完成数据库中表的创建,这就是Model First开发方式,简而言之就是先有模型再有表。

首先是添加ADO.NET 实体模型,然后选择空模型,再然后创建实体,添加字段,切记一定要添加主键,主键既可以是自增长的数字类型,也可以是Guid类型

然后就是添加字段,除主键外的字段叫添加标量属性,在设计标量字段时一定要记得设计其最大范围,不然会严重影响性能

添加实体,也就是表的关系,步骤是单击工作面板空白处新增——>关联,在添加关联对话框中进行设置,其中值得注意的是导航属性不要去掉,因为后面用他来查询将会变得非常方便

导航属性,顾名思义就是根据这个属性可以找到一个和他关联的对象实体。

这些以上步骤完成,按Ctrl+s组合键保存,vs会自动生成三个类

然后右击工作空白区,根据模型生成数据库,并执行SQL脚本创建数据库

然后我们进行代码测试:

技术分享
 1      #region 增加方法
 2 
 3 
 4         static void AddTestData()
 5         {
 6             using (ModelFirstModelContainer db = new ModelFirstModelContainer())
 7             {
 8                 Customer _Customer = new Customer { Name = "楚留香", Age = 25, CompanyName = "大旗门", Telphone = "18720671285" };
 9                 Order _Order = new Order { Amount = 15, CreateTime = DateTime.Now, OrderNo = "20170624", CustomerID = _Customer.ID };
10                 Order _Order2 = new Order { Amount = 16, CreateTime = DateTime.Now, OrderNo = "20170625", Customer = _Customer };
11                 Product _Product = new Product { ID = Guid.NewGuid(), Name = "牛栏1段", Price = 14, Weight = 22, Customer = new List<Customer>() { _Customer } };
12 
13                 db.Customer.Add(_Customer);
14                 db.Order.Add(_Order);
15                 db.Order.Add(_Order2);
16                 db.Product.Add(_Product);
17 
18                 if (db.SaveChanges() > 0)
19                 {
20                     Console.WriteLine("添加成功!");
21                 }
22                 else
23                 {
24                     Console.WriteLine("添加失败!");
25                 }
26             }
27         }
28         #endregion
View Code
技术分享
 1  #region 查询方法
 2         static void SearchCusOrder()
 3         {
 4             using (ModelFirstModelContainer db=new ModelFirstModelContainer())
 5             {
 6                 //var _OrderList = from o in db.Order
 7                 //                 where o.Customer.Name == "楚留香"
 8                 //                 select o;//先查Order表信息,然后直接通过导航属性customer来过滤  导航属性查询
 9                 var _OrderList1 = from c in db.Customer join o in db.Order on c.ID equals o.CustomerID where c.Name == "楚留香" select o;//通过Join查询
10 
11                 Console.WriteLine("客户楚留香的所有订单如下:");
12                 _OrderList1.ToList().ForEach(o=>Console.WriteLine(string.Format("订单号:{0},订单金额:{1},订单创建时间:{2}",o.OrderNo,o.Amount,o.CreateTime)));
13                 Console.ReadKey();
14             }
15         }
16         #endregion
View Code

其中新增方法中db.SaveChanges()默认是已经开启了事务的,而且在这之前都只进行了一次数据库的连接,这种类似批处理的操作大大地提升了性能

 

查询方法中用了两种查询方法。一种是导航属性查询,另一种就是join查询

其中导航属性查询相当于SQL中的子查询,join查询就相当于SQL中的Inner join查询一样,在数据量大的情况下使用导航属性查询,在数据量不大的情况下就使用join查询

 

以上的开发环境是vs2012+SQL2012

 

ModelFirst开发