我试图创建我的数据库(代码优先),我想在创建数据库时添加一些数据。
public class InitializerWithData : CreateDatabaseIfNotExists<DatabaseContext>
{
protected override void Seed(DatabaseContext ctx)
{
GroupType gt = new GroupType() { Name = "RNC" };
//save
ctx.GroupType.Add(gt);
ctx.SaveChanges();
}
}
public DatabaseContext()
{
Database.SetInitializer<DatabaseContext>(new InitializerWithData());
Database.CreateIfNotExists();
}
正如您所看到的,我编写了自定义初始化程序,但其中的代码从未被解雇,尽管数据库确实已创建。
那么我该如何解决这个问题?
答案 0 :(得分:1)
当您致电Database.CreateIfNotExists()
时,它不会触发初始值设定项的InitializeDatabase
。基本上它与初始化程序分开了实现。
如果您希望触发Seed
方法。您需要执行导致EF将查询发送到数据库的代码。
首先删除此行。
Database.CreateIfNotExists();
然后只需执行一个查询,你可能拥有的最少就是。
using(var db = new DatabaseContext())
{
db.Set<GroupType>().Any();
}
如果数据库不存在并执行Seed
方法,则此代码将创建数据库。