EF
1、委托例子:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 using System.Web.UI; 6 using System.Web.UI.WebControls; 7 8 namespace WebApplication1 9 { 10 public partial class WebForm1 : System.Web.UI.Page 11 { 12 protected void Page_Load(object sender, EventArgs e) 13 { 14 15 } 16 17 protected void Button1_Click(object sender, EventArgs e) 18 { 19 UserInfo userinfo = new UserInfo(); 20 userinfo.Email = "kerry@advancehk.com"; 21 userinfo.RegTime = DateTime.Now; 22 userinfo.UserName = "kerry"; 23 userinfo.UserPass = "123456"; 24 //这个book_shop3Entities 是在Model1.edmx中的Model1.Context.cs 25 book_shop3Entities db = new book_shop3Entities(); 26 db.UserInfo.Add(userinfo);//将数据添加到EF并且添加了标记 27 db.SaveChanges(); 28 29 } 30 } 31 }
2、实体框架(Entity Framework):
简称:EF NH
与ASP.Net MVC 关系与ADO.NET关系
ADO.NET Entity Framework是微软以ADO.NET为基础所发展出来的对象关系对应(D/R Mapping)解决方案。
实体框架Entity Framework是ADO.NET中的一组支持开发面向数据的软件应用程序的技术,是微软的一个ORM(Object Releations Mapping)框架。
3、怎么建立:
1)、新建项--数据--ADO.NET 实体数据模型
2)、设置完成后要导入命名空间:EntityFramework(dll文件的路径:C:\Users\mike.mike-PC\Desktop\Code\EFmodel\packages\EntityFramework.6.2.0\lib\net45)、System.Data.Enity
上面额操作完成之后就会多了一个文件夹packages
4、引用dll文件的时候,右键单击引用,点击管理NuGut程序包。
5、添加数据:(在aspx添加一个按钮)
1 protected void Button1_Click(object sender, EventArgs e) 2 { 3 UserInfo userinfo = new UserInfo(); 4 userinfo.Email = "kerry@advancehk.com"; 5 userinfo.RegTime = DateTime.Now; 6 userinfo.UserName = "kerry"; 7 userinfo.UserPass = "123456"; 8 //这个book_shop3Entities 是在Model1.edmx中的Model1.Context.cs 9 book_shop3Entities db = new book_shop3Entities(); 10 db.UserInfo.Add(userinfo);//将数据添加到EF并且添加了标记 11 db.SaveChanges();//只有执行这段语句的时候,才能够执行 12 }
6、插入这条语句之后想要拿这条语句的主键ID
1)第一种方式:
Insert into 表名 (数据字段名) output inserted.ID values(字段值)
2)第二种方式:(用EF)
1 protected void Button1_Click(object sender, EventArgs e) 2 { 3 UserInfo userinfo = new UserInfo(); 4 userinfo.Email = "kerry@advancehk.com"; 5 userinfo.RegTime = DateTime.Now; 6 userinfo.UserName = "kerry"; 7 userinfo.UserPass = "123456"; 8 //这个book_shop3Entities 是在Model1.edmx中的Model1.Context.cs 9 book_shop3Entities db = new book_shop3Entities(); 10 db.UserInfo.Add(userinfo);//将数据添加到EF并且添加了标记 11 db.SaveChanges();//只有执行这段语句的时候,才能够执行 12 Response.Write(userinfo.ID); 13 }
7、在EF中的实体数据类型(EDM)由以下三种模型和具有相应的文件扩展的映射文件进行定义。
1)概念架构定义语言文件(.csdl)--定义概念模型
2)存储架构定义语言文件(.ssdl)--定义存储模型
3)映射规范语言文件(.nsl)--定义存储模型与概念模型之间的映射M。
8、用EF进行查询:
1 protected void Button2_Click(object sender, EventArgs e) 2 { 3 book_shop3Entities db = new book_shop3Entities(); 4 //Ling表达式 5 var userinfolist = from u in db.UserInfo 6 where u.ID == 94 7 select u; 8 foreach (var userinfo in userinfolist) 9 { 10 Response.Write(userinfo.UserName); 11 } 12 }
9、EF里面有个延迟加载机制0:当数据用到的时候才会去数据库查询,不用的时候是不用查询的。
10、用EF进行删除数据:
1 protected void Button3_Click(object sender, EventArgs e) 2 { 3 book_shop3Entities db = new book_shop3Entities(); 4 var userinfolist = from u in db.UserInfo 5 where u.ID == 94 6 select u; 7 UserInfo userinfo= userinfolist.FirstOrDefault();//返回序列中的带个元素;如果序列中不包含任何元素,则返回NULL 8 if (userinfo != null) 9 { 10 db.UserInfo.Remove(userinfo); 11 db.SaveChanges(); 12 Response.Write("删除成功"); 13 } 14 else 15 { 16 Response.Write("要删除的数据不存在"); 17 } 18 }
另外一个删除语句:
1 protected void Button3_Click(object sender, EventArgs e) 2 { 3 book_shop3Entities db = new book_shop3Entities(); 4 UserInfo userinfo = new UserInfo() { ID = 95 }; 5 db.Entry<UserInfo>(userinfo).State = System.Data.EntityState.Deleted; 6 db.SaveChanges(); 7 }
11、更新:
1 protected void Button4_Click(object sender, EventArgs e) 2 { 3 book_shop3Entities db = new book_shop3Entities(); 4 var userinfolist = from u in db.UserInfo 5 where u.ID == 93 6 select u; 7 var userinfo = userinfolist.FirstOrDefault(); 8 userinfo.UserPass = "6666"; 9 db.Entry<UserInfo>(userinfo).State = System.Data.EntityState.Modified; 10 db.SaveChanges(); 11 }
ModelFirst
跟上面添加模型一样,不过这一次选择的是空模型。(记得加上那个最长字段)
建立模型的步骤:
1、新建空的模型


最后一步是根据模型生成数据库
2、一般拿book_shop3Entities(这个是上面的new的那个)都是在以下的地方进行找的

3、 SaveChanges:默认已经开启了事务。工作单元模式(unitofwork)
4、空模型代码:
1 protected void Button5_Click(object sender, EventArgs e) 2 { 3 Model2Container db = new Model2Container(); 4 Customer customer = new Customer() 5 { CustomerName = "kerry", CustomerPwd = "123456", SubTime = DateTime.Now }; 6 OrderInfo orderInfo = new OrderInfo() 7 { Id = Guid.NewGuid(), OrderNumber = "1001", CreateDateTime = DateTime.Now, Customer = customer }; 8 OrderInfo orderinfo1 = new OrderInfo() 9 { Id = Guid.NewGuid(), OrderNumber = "1002", CreateDateTime = DateTime.Now, Customer = customer }; 10 db.Customer.Add(customer); 11 db.OrderInfo.Add(orderInfo); 12 db.OrderInfo.Add(orderinfo1); 13 db.SaveChanges(); 14 }
查询:
protected void Button2_Click(object sender, EventArgs e) { Model3Container db = new Model3Container(); var customerlist = from c in db.Customer select c; foreach (var customer in customerlist) { Response.Write(customer.CustomerName + ":"); foreach (var order in customer.OrderInfo) { Response.Write(order.OrderNumber); } } }
5、 Linq To EF:
简单查询:
var result=from c Customer select c;
条件查询:
1)普通linq写法:
var result=from c in Customer where c.Gender=="w" select c;
2)Lambda表达式写法:
var result=from c in customer where <Customer>(c=>c.Gender=="w");
3)排序分页写法:
IQueryable<Customer> cust10=(from c in customers order by c.CustomerID select c).Skip(0).Take(10);
4)左外连接:可以的连接有Join和GroupJoin方法。GroupJoin组联接等效于左外部联接,它返回第一个(左侧)数据源的每个元素(即使其他数据源中没有关联元素)
var query= from d in ed,.orderdetail join order in edm.orders on d.orderid equals order.orderid select new { oderid=order.orderid, productid=d.produceid, unitprice=d.unitprice }
6、查询当用户的ID为1的:
protected void Button3_Click(object sender, EventArgs e) { Model3Container db = new Model3Container(); //var customerinfolist = from c in db.Customer // where c.Id == 1 // select c; //下面这段是获取customerinfolist的信息 //var customerinfo = customerinfolist.FirstOrDefault(); //foreach(var orderinfo in customerinfo.OrderInfo) //{ // Response.Write(orderinfo.OrderNumber); //} //也可这样写,直接查询orderinfo表 var orderinfolist = from o in db.OrderInfo where o.CustomerId1 == 1 select o; foreach (var orderinfo in orderinfolist) { Response.Write(orderinfo.OrderNumber); } }
7、通过Customer的num查找orderinfo的name:
protected void Button4_Click(object sender, EventArgs e) { Model3Container db = new Model3Container(); var orderinfolist = from c in db.OrderInfo where c.OrderNumber =="1001" select c; var orderinfo = orderinfolist.FirstOrDefault(); Customer customer = orderinfo.Customer; Response.Write(customer.CustomerName); }
8、删除表orderlist中,customerid=1
protected void Button5_Click(object sender, EventArgs e) { Model3Container db = new Model3Container(); var customer = (from c in db.Customer where c.Id == 1 select c ).FirstOrDefault(); var orderinfolist = customer.OrderInfo; while (orderinfolist.Count > 0) { var orderinfo = orderinfolist.FirstOrDefault(); db.Entry<OrderInfo>(orderinfo).State = System.Data.EntityState.Deleted; } db.SaveChanges(); }
9、查询部分列:
1 protected void Button6_Click(object sender, EventArgs e) 2 { 3 book_shop3Entities db = new book_shop3Entities(); 4 var userinfolist = from u in db.UserInfo 5 where u.ID == 92 6 select new { Uname = u.UserName, Upwd = u.UserPass }; 7 foreach (var userinfo in userinfolist) 8 { 9 Response.Write(userinfo.Uname + ":" + userinfo.Upwd); 10 } 11 }
10、lamada表达式进行查询:
protected void Button7_Click(object sender, EventArgs e) { book_shop3Entities db = new book_shop3Entities(); var userinfolist = db.UserInfo.Where<UserInfo>(u => u.ID == 92); foreach (var userinfo in userinfolist) { Response.Write(userinfo.UserName); } }
11、进行分页排序的例子:
1 protected void Button8_Click(object sender, EventArgs e) 2 { 3 book_shop3Entities db = new book_shop3Entities(); 4 //var userinfolist = db.UserInfo.Where<UserInfo>(u => u.ID == 92); 5 //升序排序 6 // var userinfolist = db.UserInfo.Where<UserInfo>(u => true).OrderBy<UserInfo, int>(u => u.ID); 7 //降序排序 8 // var userinfolist = db.UserInfo.Where<UserInfo>(u => true).OrderByDescending(u => u.ID); 9 //分页 10 int pageindex = 2; 11 int pagesize = 2; 12 //var userinfolist = (from u in db.UserInfo 13 // where u.ID > 0 14 // orderby u.ID descending 15 // select u).Skip<UserInfo>((pageindex - 1) * pagesize).Take<UserInfo>(pagesize); 16 //skip:表示跳过多少条记录,take取多少条记录 17 var userinfolist = db.UserInfo.Where<UserInfo>(u => true).OrderByDescending(u => u.ID).Skip<UserInfo>((pageindex - 1) * pagesize).Take<UserInfo>(pagesize); 18 19 20 foreach (var userinfo in userinfolist) 21 { 22 Response.Write(userinfo.UserName); 23 } 24 }
本文来自博客园,作者:小卖部的小辣鸡,转载请注明原文链接:https://www.cnblogs.com/kerryxuzhimao/p/10384596.html

浙公网安备 33010602011771号