entity framework数据库中的代码优先默认数据
如何在应用程序启动之前或生成数据库之后处理需要预先存在的数据的情况。 例如,我有一个我想在代码优先生成之后加载到数据库中的国家列表。 我该怎么做呢?
应用程序的结构如下:
Repository > Service > WebMVC
xml在WebMVC
项目中。
您可以创build自定义初始化程序,该初始化程序从DropCreateDatabaseIfModelChanges
或DropCreateDatabaseAlways
接口inheritance。 喜欢:
public class EntitiesContextInitializer : DropCreateDatabaseIfModelChanges<-YourDbContext->
然后你覆盖种子方法,如:
protected override void Seed(YourDbContext context)
整个示例可能如下所示:
public class EntitiesContextInitializer : DropCreateDatabaseIfModelChanges<EntitiesContext> { protected override void Seed(EntitiesContext context) { List<Role> roles = new List<Role> { new Role {Id=1, Title="Admin"}, new Role {Id=2, Title="ProjectManager"}, new Role {Id=3, Title="Developer"} }; // add data into context and save to db foreach (Role r in roles) { context.Roles.Add(r); } context.SaveChanges(); } }
编辑:设置完成后,你必须设置初始化程序,就像Ladislav Mrnka所说的那样。
Database.SetInitializer(new EntitiesContextInitializer());
即:在Global.asax中:
protected void Application_Start() { AreaRegistration.RegisterAllAreas(); RegisterGlobalFilters(GlobalFilters.Filters); RegisterRoutes(RouteTable.Routes); Database.SetInitializer(new EntitiesContextInitializer()); }
不要忘记添加using System.Data.Entity;
…..
您必须创build自定义的数据库初始值设定项,例如从DropCreateDatabaseIfModelChanges
并填充数据到覆盖的Seed
方法中。 然后,当应用程序启动时,您必须使用Database.SetInitializer
来设置新的初始化程序。 下面是用于在数据库中创build自定义索引的示例(来自CTP5)。
有关示例,请参阅http://www.asp.net/entity-framework/tutorials#Using%20MVC上的新MVC /entity framework教程系列#1和#4均显示初始化程序类。