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 } 
View Code

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         }
View Code

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         }
View Code

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         }
View Code

 

posted @ 2019-02-15 17:23  小卖部的小辣鸡  阅读(664)  评论(0)    收藏  举报