EF架构~CodeFirst模型下的数据初始化
我为什么会来
在传统的大型系统设计中,数据库建模是个比开发更早的环节,先有数据库,然后是ORM模型,最后才是开发程序,而这种模型在EF出现后发生了转变,而且有可能将来会被code first取代,因为你的关系型数据库没有必要定死,你在部署网站时,没人愿意先建立一大堆SQL语句,谁都愿意在IIS上运行后,数据库自动生成,无论是sqlserver,orcale,mysql它如果都是自动生成,那该多爽!事实上,这种开发模型已经愉愉的进入了我们的世界里,尤其是在第三方服务器部署时,这种code first让你感觉更加方法,应该你不用在一个个建立数据表了,像香港云这种第三方服务器,普通用户不支持SQL命令,建立表只能一个一个的建立。
数据初始化
而当你的数据库被建立后,数据表的信息也可以同时被初始化的,这也是今天要说的,它分于两叔,第一在config里开启这个初始化功能,第二建立自己的Initializer类,让它实现DropCreateDatabaseIfModelChanges<YourContext>泛型方法即可,具体看一下代码
一 配置启用,将web.config里的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>
二 编写初始化类代码
/// <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; } } }
感谢各位的阅读,希望本文章可以帮到您!