首先介绍一下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
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
其中新增方法中db.SaveChanges()默认是已经开启了事务的,而且在这之前都只进行了一次数据库的连接,这种类似批处理的操作大大地提升了性能
查询方法中用了两种查询方法。一种是导航属性查询,另一种就是join查询
其中导航属性查询相当于SQL中的子查询,join查询就相当于SQL中的Inner join查询一样,在数据量大的情况下使用导航属性查询,在数据量不大的情况下就使用join查询
以上的开发环境是vs2012+SQL2012