问题描述
|
如何处理启动应用程序之前或数据库生成后需要预先存在的数据的情况。例如,我有一个要在代码优先生成数据库后将其加载到数据库中的国家/地区的列表。我该怎么做呢?
应用程序的结构如下:
Repository > Service > WebMVC
xml位于WebMVC
项目中。
解决方法
您创建自定义初始化程序,该初始化程序继承自
DropCreateDatabaseIfModelChanges
或DropCreateDatabaseAlways
接口。喜欢:
public class EntitiesContextInitializer : DropCreateDatabaseIfModelChanges<-YourDbContext->
然后覆盖如下的Seed方法:
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;
.....
,您必须创建自DropCreateDatabaseIfModelChanges
派生的自定义数据库初始化程序,并使用覆盖的Seed
方法填充数据。然后,当应用程序启动时,您必须使用ѭ12来设置新的初始化程序。以下是示例(来自CTP5),用于在数据库中创建自定义索引。
,有关示例,请参见新的MVC / Entity Framework教程系列,网址为:
http://www.asp.net/entity-framework/tutorials#Using%20MVC
#1和#4都显示初始化程序类。