標籤:blog http 使用 os 檔案 io 資料 html
Code First, Database First, Same Time是我理解的asp.net mvc中用到的三種model與資料庫對應的方式,肯定是不全面的,理解也有些狹隘,今後隨著自己的理解加深再來修改這篇文章吧。這三種方式在格鬥人網 (www.helpqy.com)中有應用,這裡來自我總結一下:
【Code First】
即先寫好模型類,然後通過EF自動產生資料庫及相應的表。使用MVC自動建立的模板頁時,實際上就使用了Code First。當你開啟建立工程的時候可以看到,是沒有資料庫存在的,當你在啟動並執行頁面中註冊新帳號時,系統會自動根據web.config中的配置、ApplicationDbContext中設定的連接字串以及模型類來產生資料庫和表。至於具體怎麼產生的,在我的另外一篇文章裡【將SQL SERVER資料庫改成MySql】有具體的實現代碼,實際上是通過資料庫的Initilizer類來建立資料庫的。
通過這種方式建立的資料庫,在模型類中的成員被修改後,還可以通過VS的"封裝管理員控制台"來同步到資料庫,只需要採用資料移轉中的Enable-Migrations, Add-Migrations "XXX"和Update-Database三個步驟即可實現資料庫和模型類的同步。
【Database First】
即先建立好資料庫和表,然後建立ADO.NET實體資料模型檔案edmx,根據VS的引導,選擇已經建立好的資料庫的某一個表作為資料來源,模型類會被自動建立出來。
【Same Time】
Same Time 是我自己想出的詞兒,很不專業,就是自己的一個總結。即在代碼側,模型中的ApplicationUser已經建立好了,想另外增加其它的類以及在已有資料庫中建立對應的表,這時需要注意一下幾點:
(1) 在類的頂部加上[Table(‘"xxxx表名")]以讓該類與表相關。
(2) 在主鍵欄位前面加上[Key]屬性。
(3) 如果表中存在多個主鍵,在主鍵上除開添加[Key]屬性以外,還需要添加[Column(Order = XX列號)]屬性,以表明不同主鍵的順序。否則會出現“無法確定組合主鍵排序”的錯誤。
(4) 新增加的類可以不用放在ApplicationDbContext中,可以建立DataContext來建立Context模型,然後通過linq to sql來訪問,但是在實際部署時,這種方式會出現存取違規錯誤,因此還是建議在ApplicationDbContext中,定義該建立模型類的DbSet,然後通過ApplicationDbContext這個統一的入口來訪問。