C# Can';t获取实体框架MVC应用程序以将数据种子植入数据库
我承认在这个问题上有点疯狂,所以请容忍我。我已经试着做了5个小时了,现在我几乎只是把头撞在墙上。以下是我所拥有的: Global.asax.csC# Can';t获取实体框架MVC应用程序以将数据种子植入数据库,c#,asp.net-mvc,entity-framework,C#,Asp.net Mvc,Entity Framework,我承认在这个问题上有点疯狂,所以请容忍我。我已经试着做了5个小时了,现在我几乎只是把头撞在墙上。以下是我所拥有的: Global.asax.cs 名称空间MyApp { 公共类MVC应用程序:System.Web.HttpApplication { 受保护的无效应用程序\u Start() { SetInitializer(新的MyInitializer()); } } } MyInitializer.cs 名称空间MyApp.App\u开始 { 公共类MyInitializer:DropCr
名称空间MyApp
{
公共类MVC应用程序:System.Web.HttpApplication
{
受保护的无效应用程序\u Start()
{
SetInitializer(新的MyInitializer());
}
}
}
MyInitializer.cs
名称空间MyApp.App\u开始
{
公共类MyInitializer:DropCreateDatabaseIfModelChanges
{
受保护的覆盖无效种子(MyContext上下文)
{
//种子数据在这里
样本数据=新列表
{
新的MyModel{“foo”},
新MyModel{“bar”}
};
sample_data.ForEach(s=>context.MyModels.Add);
SaveChanges();
}
}
}
MyContext.cs
名称空间MyApp.Models
{
公共类MyContext:DbContext
{
public MyContext():base(“MyContext”)
{
SetInitializer(新的MyInitializer());
}
公共DbSet MyModels{get;set;}
}
}
Web.config
<appSettings>
<add key="MyInitializer MyApp.Models.MyContext, MyApp.Models" value="MyApp.App_Start.MyInitializer, MyApp.Models" />
</appSettings>
我只是不明白为什么它没有播下任何数据。我在这里和其他地方读过十几个或更多类似的案例,几乎每一次迭代都尝试过,但仍然无法触发它。它甚至从未命中Seed()函数。数据库存在,如果我删除它,它将被重建,但从未填充
我倾向于我的web.config有问题,但我还没有找到答案。有什么建议吗?根据,在您实际尝试访问数据库之前,不会调用DbInitializer
// Code copied from linked blog
static void Main(string[] args)
{
Database.SetInitializer(new DropCreateDatabaseAlways<BlogContext>());
using (var db = new BlogContext()) //initializer won't be called here
{
...
db.Categories.Add(cat); //initializer will be called here
db.BlogPosts.Add(post);
...
}
Console.ReadLine();
}
//从链接博客复制的代码
静态void Main(字符串[]参数)
{
SetInitializer(新的DropCreateDatabaseAlways());
使用(var db=new BlogContext())//此处不会调用初始值设定项
{
...
db.Categories.Add(cat);//将在此处调用初始值设定项
db.BlogPosts.Add(post);
...
}
Console.ReadLine();
}
我解决了这个问题。显然,这个问题是双重的
<appSettings>
<add key="MyInitializer MyApp.Models.MyContext, MyApp.Models" value="MyApp.App_Start.MyInitializer, MyApp.Models" />
</appSettings>
在这两件事之间[嗯,更像是4件事],它现在似乎起作用了。您在使用迁移吗?请参见此处:是否将种子代码添加到正确的类?您的代码显示“new MyInitializer()”,但显示的类的名称是PropertyInitializer@Sam修正了。只是转录错误。我在MVC应用程序和非MVC应用程序之间转录时遇到问题。由于我不想在Global.asax.cs文件中单独添加每个项目,这对我有什么帮助?我认为种子覆盖的目的是为了不必这样做?种子覆盖是为了当数据库第一次被dbContext访问时,它可以进行特殊处理。在您的示例代码中,您实际上从未做过任何需要往返数据库的事情。