如何处理在应用程序启动之前或数据库生成之后需要预先存在的数据的情况。例如,我有一个国家列表,我想在代码优先生成后将其加载到数据库中。我该怎么做?
应用程序结构如下:
存储库 > 服务 > WebMVC
xml 在 WebMVC
项目中。
最佳答案
您创建自定义初始化程序,它继承自 DropCreateDatabaseIfModelChanges
或 DropCreateDatabaseAlways
接口(interface)。喜欢:
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 所提到的,设置完之后,您还必须设置 Initializer。
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;
.....
关于database - Entity Framework 代码优先数据库中的默认数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5655841/