使用EntityFramework6鏈接MySQL

使用EntityFramework6鏈接MySQL

不是微軟的親兒子這待遇就是不同,其中的坑可真實很多,第一次連MySQL足足折騰了我大半天。html

廢話很少說直接開始。mysql

安裝MySQL

從官網上下載最新版,下載好之後直接安裝就能夠了。最新版的MySQL已經包含了全部開發須要的功能(包括MySQL鏈接器),相信會用MySQL,怎麼裝應該都沒有問題,這裏就不囉嗦了。不過有一點值得提醒的是,在選擇要安裝的內容時記得將全部功能都裝上,以後出現問題多半都是哪一個模塊漏裝了。sql

安裝好以後,在開始菜單中找到MySQL Workbench,這是MySQL自帶的一款管理工具,我的也比較喜歡,一直用的也都是這個。之前要單獨安裝,不過如今自帶了。數據庫

建立數據庫

爲了演示我先建立一個叫test的數據庫,並建立一張學生表Student數據結構

使用Entity Framework6 鏈接MySQL數據庫

準備工做都就緒了,接下來我建立一個項目來演示如何鏈接MySQL數據庫。數據庫設計

考慮到有些同窗可能並不使用.NET MVC,因此這裏咱們建立一個控制檯項目來演示。別擔憂,在.NET MVC中,配置的過程都是徹底同樣的。工具

1、添加EF包

打開NuGet包管理工具後,點擊瀏覽,而後搜索EntityFramework。先按裝EntityFramework,再安裝MySQL.Data.Entity.測試

經過NuGet來安裝EF能夠幫咱們省去不少麻煩的配置環節。spa

2、經過嚮導來鏈接MySQL數據庫

按照習慣,我先在項目中創建了一個Modules文件夾,用於保存全部生成的數據模型文件。以後右擊,新建項。設計

以後選擇ADO.NET實體數據模型,我取名爲DBModel。

選擇來自數據庫的CodeFirst模型,點擊下一步。

PS:EF有三種方式來運行。

第一種是經過EF設計器,相似於傳統的數據庫設計器,經過畫出的數據結構圖來生成對應的類(數據模型)和數據庫,不過這種方式好像在EF7中將被廢棄掉了,因此不推薦使用。

第二種是經過先建立好數據庫,而後根據數據庫來生成對應的數據模型,這種方式稱之爲數據庫優先DB Frist

第三種是先手工編寫好須要的數據模型,而後根據數據模型逆向生成數據庫,這種方式稱之爲代碼優先 Code First

注意:
無論你是習慣數據庫優先仍是代碼優先。都請先用數據庫優先來生成代碼,這樣會省去不少中間配置的環節。

以後選擇新建鏈接

輸入你的數據庫地址(默認是localhost)和帳號、密碼,勾選保存密碼,在數據庫名稱中選擇你對應的數據庫,在這個人是test。完成後點擊測試鏈接,提示沒有問題後點擊肯定。這一步若是出錯通常都是數據庫配置的問題,跟EF沒有關係。

選擇,是包含敏感信息

選擇你須要的數據庫和表,在這我選擇的是我以前在數據庫中建立的Student表。肯定所生產對象名稱的單複數形式這個選項隨意。最開始我也沒理解到它的做用,其實就是英語的單複數,就是在名詞後面加S和不加S。

點擊完成以後若是你幸運的話,到這一步就成功了。不過事情通常沒那麼簡單,傲嬌的EF就提示我什麼主鍵值爲空。

我第一次弄的時候這東西折磨了我大半天,什麼辦法都試盡了,好在最後在Stack Overflow上找到了辦法。

打開MySQL管理器,執行

  1. use `test`; /*你的數據庫名*/
  2. set global optimizer_switch='derived_merge=OFF';

執行完以後再按照上面的步驟從頭一遍應該就能夠了,若是仍是不行就重啓一下MySQL服務,再執行一下上面的代碼,再試試。

3、分析生成的代碼

回到解決方案資源管理器,這時咱們的項目下就應當多了兩個文件,一個是DBModel數據庫上下文(到時都是經過它來操做數據庫),一個是student數據模型

打開DBModel.cs

student數據模型中對數據作了些描述(你不用代碼優先CodeFirst這些通常都不用管)

使用EF進行增刪改查

到這一步EF鏈接MySQL就已經完成了,以後你就能夠像操做SQL Server同樣使用EF操做MySQL了。不過我仍是演示下如何使用EF操做數據庫。

  1. class Program
  2. {
  3. static void Main(string[] args)
  4. {
  5. using (var db = new DBModel())
  6. {
  7. var student = (from t in db.students //查詢張三
  8. where t.name == "張三"
  9. select t).First();
  10. Console.WriteLine("張三的年齡是:" + student.age); //輸出:張三的年齡是:15
  11. db.students.Remove(student); //刪除張三
  12. //db.Entry(student).State = System.Data.Entity.EntityState.Deleted; //或者這樣刪除張三
  13. db.students.Add(new student { name = "小明", age = 21 }); //向數據庫中添加小明
  14. student = (from t in db.students //查詢李四
  15. where t.name == "李四"
  16. select t).First();
  17. student.age = 999; //更改李四的年齡
  18. //db.Database.ExecuteSqlCommand("delete from test.student where true"); //執行普通的SQL,刪除所有數據
  19. //var result = db.Database.SqlQuery<student>("select * from test.student"); //執行普通的SQL,查詢全部學生
  20. db.SaveChanges(); //保存結果
  21. }
  22. Console.Read();
  23. }
  24. }

目錄:EntityFramework6 快速入門教程

下一節:使用EntityFramework6完成增刪查改和事務

相關文章
相關標籤/搜索