Code First, Database First, Same Time是我理解的asp.net mvc中用到的三種model與數(shù)據(jù)庫對(duì)應(yīng)的方式,肯定是不全面的,理解也有些狹隘,今后隨著自己的理解加深再來修改這篇帖子吧。這三種方式在 (www.helpqy.com)中有應(yīng)用,這里來自我總結(jié)一下:
【Code First】
即先寫好模型類,然后通過EF自動(dòng)生成數(shù)據(jù)庫及相應(yīng)的表。使用MVC自動(dòng)創(chuàng)建的模板頁時(shí),實(shí)際上就使用了Code First。當(dāng)你打開新建工程的時(shí)候可以看到,是沒有數(shù)據(jù)庫存在的,當(dāng)你在運(yùn)行的頁面中注冊(cè)新賬號(hào)時(shí),系統(tǒng)會(huì)自動(dòng)根據(jù)web.config中的配置、applicationDbContext中設(shè)置的連接字符串以及模型類來生成數(shù)據(jù)庫和表。至于具體怎么生成的,在我的另外一篇帖子里【將SQL SERVER數(shù)據(jù)庫改成MySQL】有具體的實(shí)現(xiàn)代碼,實(shí)際上是通過數(shù)據(jù)庫的Initilizer類來創(chuàng)建數(shù)據(jù)庫的。
通過這種方式創(chuàng)建的數(shù)據(jù)庫,在模型類中的成員被修改后,還可以通過VS的"程序包管理器控制臺(tái)"來同步到數(shù)據(jù)庫,只需要采用數(shù)據(jù)遷移中的Enable-Migrations, Add-Migrations "XXX"和Update-Database三個(gè)步驟即可實(shí)現(xiàn)數(shù)據(jù)庫和模型類的同步。
【Database First】
即先創(chuàng)建好數(shù)據(jù)庫和表,然后新建ADO.NET實(shí)體數(shù)據(jù)模型文件edmx,根據(jù)VS的引導(dǎo),選擇已經(jīng)創(chuàng)建好的數(shù)據(jù)庫的某一個(gè)表作為數(shù)據(jù)源,模型類會(huì)被自動(dòng)創(chuàng)建出來。
【Same Time】
Same Time 是我自己想出的詞兒,很不專業(yè),就是自己的一個(gè)總結(jié)。即在代碼側(cè),模型中的ApplicationUser已經(jīng)創(chuàng)建好了,想另外增加其它的類以及在已有數(shù)據(jù)庫中創(chuàng)建對(duì)應(yīng)的表,這時(shí)需要注意一下幾點(diǎn):
(1) 在類的頂部加上[Table('"xxxx表名")]以讓該類與表相關(guān)。
(2) 在主鍵字段前面加上[Key]屬性。
(3) 如果表中存在多個(gè)主鍵,在主鍵上除開添加[Key]屬性以外,還需要添加[Column(Order = XX列號(hào))]屬性,以表明不同主鍵的順序。否則會(huì)出現(xiàn)“無法確定組合主鍵排序”的錯(cuò)誤。
(4) 新增加的類可以不用放在ApplicationDbContext中,可以創(chuàng)建DataContext來建立Context模型,然后通過linq to sql來訪問,但是在實(shí)際部署時(shí),這種方式會(huì)出現(xiàn)訪問沖突錯(cuò)誤,因此還是建議在ApplicationDbContext中,定義該新建模型類的DbSet,然后通過ApplicationDbContext這個(gè)統(tǒng)一的入口來訪問。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注