EF架構~CodeFirst模型(xing)下的數據初始化
我為什么會來
在(zai)傳(chuan)統的(de)(de)(de)大型系統設計中,數(shu)據(ju)(ju)庫(ku)建(jian)模是個(ge)比(bi)開(kai)發(fa)更(geng)早的(de)(de)(de)環節,先有數(shu)據(ju)(ju)庫(ku),然后是ORM模型,最后才是開(kai)發(fa)程序,而這(zhe)種模型在(zai)EF出現后發(fa)生了轉變,而且有可能將(jiang)來會被code first取代,因為你(ni)的(de)(de)(de)關系型數(shu)據(ju)(ju)庫(ku)沒有必要定(ding)死,你(ni)在(zai)部(bu)署網站(zhan)時,沒人(ren)愿意(yi)(yi)先建(jian)立(li)一大堆SQL語(yu)句,誰都(dou)愿意(yi)(yi)在(zai)IIS上運行后,數(shu)據(ju)(ju)庫(ku)自動生成(cheng),無論是sqlserver,orcale,mysql它如果都(dou)是自動生成(cheng),那該(gai)多爽!事實上,這(zhe)種開(kai)發(fa)模型已經愉愉的(de)(de)(de)進(jin)入(ru)了我們(men)的(de)(de)(de)世(shi)界里,尤其是在(zai)第三(san)方服務(wu)器部(bu)署時,這(zhe)種code first讓你(ni)感覺(jue)更(geng)加方法,應該(gai)你(ni)不用在(zai)一個(ge)個(ge)建(jian)立(li)數(shu)據(ju)(ju)表了,像香港云這(zhe)種第三(san)方服務(wu)器,普(pu)通(tong)用戶不支持SQL命令,建(jian)立(li)表只能一個(ge)一個(ge)的(de)(de)(de)建(jian)立(li)。
數據初始化
而當你的(de)數據庫被建(jian)立(li)后,數據表的(de)信(xin)息也可以同時(shi)被初始化的(de),這也是今天要說的(de),它(ta)(ta)分于兩叔,第(di)一(yi)在(zai)config里開啟這個初始化功能,第(di)二建(jian)立(li)自己的(de)Initializer類,讓它(ta)(ta)實現DropCreateDatabaseIfModelChanges<YourContext>泛型方(fang)法即(ji)可,具體看一(yi)下代碼
一 配置(zhi)啟用(yong),將(jiang)web.config里的(de)entityFramework改這樣
<entityFramework>
<contexts>
<context type="Lind.DDD.Manager.ManagerContext, Lind.DDD.Manager">
<databaseInitializer type="Lind.DDD.Manager.ManagerInitializer, Lind.DDD.Manager" />
</context>
</contexts>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="v12.0" />
</parameters>
</defaultConnectionFactory>
</entityFramework>
二 編(bian)寫(xie)初始(shi)化類代碼
/// <summary> /// 數據庫初始化 /// </summary> public class ManagerInitializer : DropCreateDatabaseIfModelChanges<ManagerContext> { protected override void Seed(ManagerContext context) { try { #region 部門表 var department = new WebDepartments { About = "", DepartmentName = "公司", DeptLevel = 0, Operator = "admin", ParentID = null, SortNumber = 0, Status = 1, UpdateDate = DateTime.Now, }; context.WebDepartments.Add(department); context.SaveChanges(); #endregion #region 菜單表 var menu = new WebManageMenus { About = "", LinkUrl = "", MenuLevel = 1, MenuName = "根", Operator = "admin", ParentID = null, SortNumber = 0, Status = 1, UpdateDate = DateTime.Now, }; context.WebManageMenus.Add(menu); context.SaveChanges(); #endregion base.Seed(context); } catch (Exception) { throw; } } }
感謝各(ge)位的閱(yue)讀,希望本文章可以(yi)幫到您!