我在 Asp.net 项目中使用 EF Code First。Code First 很好地创建了我的数据库,但我很适合让它为我的数据库提供数据。我正在使用这样的自定义数据库初始化程序:
namespace Toolkit.Model
{
public class EntitiesContextInitializer : DropCreateDatabaseIfModelChanges<ToolkitContext>
{
protected override void Seed(ToolkitContext context)
{
List<Server> Servers = new List<Server>
{
new Server { ServerName = "Server 16" },
new Server { ServerName = "Server 29" }
};
foreach (Server server in Servers)
{
context.Servers.Add(server);
}
context.SaveChanges();
}
}
}
我在 Global.asax.cs 中设置了初始化程序并强制数据库像这样初始化:
using Toolkit.Model;
namespace Toolkit
{
public class Global : System.Web.HttpApplication
{
void Application_Start(object sender, EventArgs e)
{
Database.SetInitializer(new EntitiesContextInitializer());
var context = new ToolkitContext();
context.Database.Initialize(false);
}
...
}
问题是我的初始化程序永远不会被调用,所以我的数据库永远不会被填充。我什至尝试将初始化程序更改为继承 DropCreateDatabaseAlways 但仍然没有...我在这里缺少什么?
编辑 所以在删除数据库后,我的初始化程序被调用得很好。但是我仍然想知道为什么它没有在其他情况下被调用,例如当我添加一个表时(因此模型发生了变化)或者当我将初始化程序更改为 DropCreateDatabaseAlways 时。