使用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