使用EF添加数据、查询数据。


1、新建一个页面,为其添加一个Button按钮,当点击Button的时候,添加数据到数据库。

2、先看一下右边的Model1.Context.cs文件。 从下图可以看出里面有一个 EFEntities类继承自DbContext,继承父类的时候要为其传入参数 name=EFEntities,其中 name=EFEntities是连接数据库的语句。

 1 //------------------------------------------------------------------------------
 2 // <auto-generated>
 3 //     此代码已从模板生成。
 4 //
 5 //     手动更改此文件可能导致应用程序出现意外的行为。
 6 //     如果重新生成代码,将覆盖对此文件的手动更改。
 7 // </auto-generated>
 8 //------------------------------------------------------------------------------
 9 
10 namespace EFTest
11 {
12     using System;
13     using System.Data.Entity;
14     using System.Data.Entity.Infrastructure;
15     
16     public partial class EFEntities : DbContext
17     {
18         public EFEntities(): base("name=EFEntities")            
19         {
20         }
21     
22         protected override void OnModelCreating(DbModelBuilder modelBuilder)
23         {
24             throw new UnintentionalCodeFirstException();
25         }
26        //Dbset表示可以对UserInfo实体类进行一系列的操作。
27         public virtual DbSet<UserInfo> UserInfo { get; set; }
28     }
29 }

 3、点击按钮的时候插入数据。

 1 protected void Add_Click(object sender, EventArgs e)
 2 {
 3     UserInfo userInfo = new UserInfo();
 4     userInfo.UserName = "谢尊旭";
 5     userInfo.UserPassword = "123456";
 6     userInfo.UserEmail = "1227111748@qq.com";
 7     //EFEntities 可以理解成EF的上下文数据操作类,负责与数据库打交道。
 8     EFEntities db = new EFEntities();
 9     //将数据添加到EF,并且标记为添加标记,返回受影响的行数。
10     db.UserInfo.Add(userInfo);
11     //SaveChanges()数据保存到数据库,根据前面的标记生成对应的Sql语句,交给数据库执行。
12     db.SaveChanges();
13 }

 4、为属性赋值的原理。

    

     执行顺序:应用程序构建好数据后交给DbContext,DbContext要读取Xml中的文件,找到实体和表之间映射关系,生成相应的sql语句,把生成sql语句交给DataBase执行。

5、EF查询数据。

 1 protected void Select_Click(object sender, EventArgs e)
 2 {
 3     //实例化EFEntities类。
 4     EFEntities db = new EFEntities();
 5     //查询的时候使用的是linq语句。查询UserId=15。
 6     //IQueryable<UserInfo> userInfo = from u in db.UserInfo;
 7     //通过下面这句返回的是IQueryable<UserInfo>类型,而不是一个单纯的UserInfo类型,切记。一般都用推断了。
 8     var userInfoList = from u in db.UserInfo
 9                        where u.UserId == 15
10                        select u;
11     //EF特点:延迟加载机制。就是数据用到的时候才去数据库中查取,不用的时候就不查询。
12     //就是只有走到循环遍历中的in userInfoList的时候,才开始去数据库中查数据。
13     foreach (var userInfo in userInfoList) //这个时候userInfo类型是UserInfo了,但这里还是用推断了。
14     {
15         Response.Write(userInfo.UserName);
16     }
17     //linq语句的语法和sql语句执行的顺序差不多。
18     //让上面的linq语句变成sql语句为:select * from UserInfo where UserId =15
19     //Sql语句执行的顺序是:from UserInfo 
20     //                   where UserId=15
21     //                   select *
22 }

6、EF删除数据。

 1 protected void Remove_Click(object sender, EventArgs e)
 2 {
 3     EFEntities db = new EFEntities();
 4     var userInfoList = from u in db.UserInfo
 5                        where u.UserId == 15
 6                        select u;
 7     //FirstOrDefault()返回序列中的第1个元素,如果序列中不包含任何元素,则返回默认值,默认值为null。
 8     //First()返回序列中的第一个元素。如果根据条件去查数据,如果没找到,用First()会抛异常。
 9     //SingleOrDefault()返回序列中的唯一元素,如果该序列为空,则返回默认值,如果包含多个元素,此方法则引出异常。
11     UserInfo userInfo = userInfoList.FirstOrDefault();
12     if (userInfo != null)
13     {
14         //db.UserInfo.Remove(userInfo);
15         //还可以用这种方法打一个删除标记。
16         db.Entry<UserInfo>(userInfo).State = System.Data.Entity.EntityState.Deleted;
17         db.SaveChanges();
18         Response.Write("删除成功");
19     }
20     else
21     {
22         Response.Write("删除失败");
23     }
24 }

 7、EF删除数据2,Remove() 和Entity之间的区别。

 1 protected void Remove2_Click(object sender, EventArgs e)
 2 {
 3     EFEntities db = new EFEntities();
 4     UserInfo userInfo = new UserInfo() { UserId = 13 };
 5     //这个时候如果用 db.UserInfo.Remove(userInfo)就会抛出异常。
 6     //db.UserInfo.Remove(userInfo);
 7     //这句话的意思是让EF操作类先找到这个对象,然后加上删除标记。
 8     db.Entry<UserInfo>(userInfo).State = System.Data.Entity.EntityState.Deleted;
 9     db.SaveChanges();
10 }

8、更新数据。

protected void Update_Click(object sender, EventArgs e)
{
    EFEntities db = new EFEntities();
    //先查询要获取的对象。
    var userInfo = from u in db.UserInfo
                   where u.UserId == 12
                   select u;
    //得到具体对象。
    var userInfo2 = userInfo.FirstOrDefault();
    //修改密码。
    userInfo2.UserPassword = "AAAAAAA";
    //指定状态。
    db.Entry<UserInfo>(userInfo2).State = System.Data.Entity.EntityState.Modified;
    db.SaveChanges();
    Response.Write("修改成功");  
}

End。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM