C#:ORM--實體框架EF(entity framework)(2)


   

有三種不同的模式可以在您的應用中使用EF框架

  1. Database First
  2. Code First
  3. ModelFirst

Db-First

在DbFirst時,你使用VS中的EDM向導或使用EF命令來從數據庫生成context和實體。

EF6廣泛地支持 DbFirst,訪問 EF6 DbFirst章節來學習如何使用EF6 DbFirst方法開發。

EF Core對這種方法僅提供有限的支持。

Code-First

當你的應用程序還沒有數據庫時,使用CodeFirst模式。在CodeFirst模式中,需要先寫實體類(域類)和上下文類,然后EF使用遷移命令從這些類創建數據庫。 遵守領域驅動設計(DDD)原則的開發者喜歡先編寫域類,然后生成需要的數據庫來存放數據。

閱讀 EF6 CodeFirst教程 章節來學習EF6 CodeFirst 開發。 閱讀 EF Core 章節來學習 EF Core 中的CodeFirst開發。

Model-First

Model-First 模式中,先在VS的可視化設計器中創建實體、關系和繼承層次,然后從視覺模型生成實體類、context類和數據庫腳本。

EF6包含這種模式的有限支持。

EF Core不支持這種模式。

選擇您的應用程序開發方法

使用下面的流程圖來決定在您的應用程序中正確的使用EF的方式:

根據上面的圖,如果你的應用程序中已經有一個域類,那你可以使用CodeFirst模式,因為你可以從現有類創建一個數據庫。如果你有一個數據庫,那么你可以使用Database-First模式創建一個EDM。如果你沒有數據庫和類,並且喜歡在可視化設計器中設計你的數據庫模型,那么使用ModelFirst 模式。

 

VS配置EF環境

1.使用EF,創建Model (DataFirst)

  1. 在解決方案中,創建所使用的項目。例如:ASP網站項目、WinForm窗體項目……
  2. 在新建的項目中,添加 > 新建項 > 數據 > ADO.NET實體數據模型(.edmx)
  3. 在新建的.edmx中選擇:從數據庫生成(DatabaseFirst)
  4. 選擇新建連接,填寫連接數據庫 > 填寫登錄數據庫信息 > 選擇或輸入需要生成模型的數據庫名稱.
  5. 選擇需要創建模型的表、視圖、存儲過程
  6. 點擊下一步,直接生成(有些電腦可能會出現警告信息,忽視即可)。

 

流程.png

2.使用EF創建的內容

0.創建完成后,項目會默認引入兩個命名空間:EntityFramework、System.Data.Entity

1. 最外層為.edmx文件,EF模型設計器,展示從數據庫創建的模型,包括:表名、屬性(表字段)、導航屬性(外鍵、表與表之間的對應關系)、表與表之間1對1、1對多的關系。

2. Model1.Context.tt、Model.Designer.cs、Model.edmx.diagram、Model1.tt

1). Model1.Context.tt:包含Model1.Context.cs

 Model1.Context.tt由T4模板生成,不可更改,Model1.Context.cs繼承自DbContext,包括構造方法(繼承自父類的構造方法,並在此傳遞配置文件的數據庫連接字符串)、各個表所對應的Dbset<T>類型的自動屬性。

2). Model.Designer.cs:自動生成,無需更改

3) . Model.edmx.diagram:描述edmx文件的元素信息(名稱、位置……)

4). Model1.tt:包含生成的Model.cs,自身由T4模板生成,無需修改

 

3.使用EF進行增刪改查

查詢

復制代碼
1 StudentMISEntities stu = new StudentMISEntities();
2 //IQueryable<Users> userInfoList=from u in stu.Users
3 var userInfoList = from u in stu.Users
4                    where u.id == 10
5                    select u;
6 foreach (var item in userInfoList)//EF延遲加載機制,數據用到的時候才去數據庫中查詢,不用的時候不去查詢,提高程序性能
7 {
8       Response.Write(item.uName);
9 }
復制代碼

 

增加

復制代碼
1 Users userInfo = new Users();
2  userInfo.uName = "2333";
3  userInfo.uPassword = "123";
4  userInfo.uRole = "學生";
5 
6  StudentMISEntities stu = new StudentMISEntities();//創建EF數據操作類實例
7  stu.Users.Add(userInfo);//把數據添加到EF,並添加標記
8  stu.SaveChanges();//把數據保存到數據庫
復制代碼

 

修改

復制代碼
StudentMISEntities stu = new StudentMISEntities();
var userInfoList = from u in stu.Users
                   where u.id == 16
                   select u;
Users userInfo = userInfoList.FirstOrDefault();//返回第一個元素,如果沒有的話,返回null
if (userInfo!=null)
{
   userInfo.uPassword = "12345678";
   stu.Entry<Users>(userInfo).State = System.Data.Entity.EntityState.Modified;//添加修改標記
   stu.SaveChanges();
   Response.Write(userInfo.uPassword);
}
else
{
   Response.Write("要修改的數據不存在");
}
復制代碼

 

刪除

復制代碼
 1  StudentMISEntities stu = new StudentMISEntities();
 2  var userInfoList = from u in stu.Users
 3                     where u.id == 17
 4                     select u;
 5 Users userInfo = userInfoList.FirstOrDefault();//返回第一個元素,如果沒有的話,返回null
 6 if (userInfo!=null)
 7 {
 8    //stu.Users.Remove(userInfo);
 9    stu.Entry<Users>(userInfo).State = System.Data.Entity.EntityState.Deleted;//添加刪除標記
10    stu.SaveChanges();
11    Response.Write("已刪除");
12 }
13 else
14 {
15    Response.Write("要刪除的數據不存在");
16 }
復制代碼

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM