第十一節: EF的三種模式(一) 之 DBFirst模式(SQLServer和MySQL兩套方案)


一. 簡介

   EF連接數據庫有三種模式,分別是DBFirst、ModelFirst、CodeFirst,分別適用於不同的開發場景。

  該章節,將主要介紹EF的DBFirst連接SQLServer數據庫和MySql數據庫兩種操作方式

  該模式在EF中出現的出現的最早,符合我們的傳統開發模式,先設計數據庫→然后在代碼通過EF與數據庫建立映射關系,是EF最早的一種使用方式,使用廣泛.以數據庫為驅動,生成實體模型,從而驅動整個開發流程。

 (1). 優點:操作簡單,直接通過可視化界面與數據庫表(存儲過程、視圖等)建立映射關系,省去自己建立表實體的繁瑣步驟.
 (2). 缺點:與表依賴太強,而且實體是通過T4模板生成的,無法自己根據實際需要來修改,並且一旦數據庫修改,就需要重新映射edmx文件了.
 (3). 特點:通過T4模板來生成EF上下文和實體模型; 並且可以直接將存儲過程或視圖映射到生成的上下文中,通過EF上下文直接調用存儲過程(詳見 EF調用存儲過程章節)

 

二. DBFirst連接SQLServer數據庫

1. 選擇ADO.NET數據實體模型

 

 

2. 選擇模型內容:來自數據庫的EF設計器

 

 

3. 設置服務器及連接字符串

 

 

 

4. 選擇數據庫的連接並且可以設置配置文件的名稱

 

5. 選擇要映射的表、視圖、存儲過程和函數,完成映射

 

 

6. 如果框架是分層的,需要將生產的連接數據庫的字符串,復制到主程序的配置文件中

 

三. DBFirst連接MySQL數據庫

 事先准備和注意事項:

 步驟:

 ①:安裝mysql-connector-net-6.9.9.msi,下載地址:https://dev.mysql.com/downloads/connector/net/ (vs2012-vs2017通用)

 ②:安裝mysql-for-visualstudio-1.2.7.msi,下載地址:https://dev.mysql.com/downloads/windows/visualstudio/ (vs2012-vs2017通用)

 ③:連接遠程服務器需要先在對應數據庫服務器上對訪問外來的ip和用戶名、密碼進行授權。

 如:GRANT ALL PRIVILEGES ON *.* TO 'root'@'39.88.192.171' IDENTIFIED BY '123456' WITH GRANT OPTION;

 表示:ip為39.88.192.171的root用戶、密碼為123456可以遠程訪問該數據庫服務器

 ④:安裝常規的DBFist模式進行連接即可,但連接界面要選擇MySQL對應的界面。

 特別注意:在使用該模式的時候,會遇到這么幾個煩人的情況,如果該項目中已經引用的了EF的程序集,在可視化界面無法選擇EF版本。

 但是如果你把引用的程序集刪了,可視化界面只能選擇EF5.0

 所以解決方案:

 步驟①:如果引用了EF的程序集,先刪掉,然后用可視化界面把EF5.0添加進來,然后在使用Nuget把EF5.0卸載掉。

 步驟②:通過nuget一次添加 EF6.x、MySql.Data、MySql.Data.Entity、MySql.Web 程序集的引用.

 步驟③:如果是分層開發,不但要向封裝層添加引用,還要想主程序層添加EF6.x、MySql.Data、MySql.Data.Entity、MySql.Web 程序集的引用.

 步驟④:主程序層配置文件中<entityFramework>→<providers>節點下添加:

 <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6"></provider>

 如果是通過Nuget添加的程序集,檢查一下是否已經自動添加了,避免重復添加的情況

鏈接步驟:使用MySQL的客戶端界面

 

代碼測試,和SQLServer寫法並沒有什么兩樣

 1      private static void NewMethod()
 2         {
 3             Console.WriteLine("-----------------------1. DBFirst模式連接MySQL數據庫-------------------------------");
 4             using (DbContext db = new mysqldb1Entities())
 5             {
 6                 //1.1 測試查詢 (正常)
 7                 //List<tbb1> tList = db.Set<tbb1>().ToList();
 8                 //foreach (var item in tList)
 9                 //{
10                 //    Console.WriteLine("id為:{0},name為:{1}", item.id, item.name);
11                 //}
12 
13                 //1.2 測試一下大數據 (正常)
14                 Stopwatch watch = Stopwatch.StartNew();
15                 List<tbb1> tList2 = new List<tbb1>();
16                 for (int i = 0; i < 1000; i++)
17                 {
18                     tbb1 t = new tbb1();
19                     t.id = Guid.NewGuid().ToString("N");
20                     t.name = "t" + i;
21                     tList2.Add(t);
22                 }
23                 db.BulkInsert(tList2);
24                 watch.Stop();
25                 Console.WriteLine("{0}條數據耗時:{1}", 1000, watch.ElapsedMilliseconds);
26             }
27         }
28         #endregion

 


免責聲明!

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



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