使用EntityFramework6連接MySQL


使用EntityFramework6連接MySQL

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

廢話不多說直接開始。

安裝MySQL

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

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

創建數據庫

為了演示我先創建一個叫test的數據庫,並創建一張學生表Student

使用Entity Framework6 連接MySQL數據庫

准備工作都就緒了,接下來我創建一個項目來演示如何連接MySQL數據庫。

考慮到有些同學可能並不使用.NET MVC,所以這里我們創建一個控制台項目來演示。別擔心,在.NET MVC中,配置的過程都是完全一樣的。

一、添加EF包

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

通過NuGet來安裝EF可以幫我們省去很多麻煩的配置環節。

二、通過向導來連接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服務,再執行一下上面的代碼,再試試。

三、分析生成的代碼

回到解決方案資源管理器,這時我們的項目下就應當多了兩個文件,一個是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完成增刪查改和事務


免責聲明!

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



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