我承认在这个问题上有点疯狂,所以请耐心等待。我一直在尝试这样做约5个小时,这时我几乎只是将头撞在墙上。这是我所拥有的:
Global.asax.cs
namespace MyApp
{
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
Database.SetInitializer(new MyInitializer());
}
}
}
MyInitializer.cs
namespace MyApp.App_Start
{
public class MyInitializer : DropCreateDatabaseIfModelChanges<MyContext>
{
protected override void Seed(MyContext context)
{
// seed data goes here
sample_data = new List<MyModel>
{
new MyModel{"foo"},
new MyModel{"bar"}
};
sample_data.ForEach(s => context.MyModels.Add(s));
context.SaveChanges();
}
}
}
MyContext.cs
namespace MyApp.Models
{
public class MyContext : DbContext
{
public MyContext() : base("MyContext")
{
Database.SetInitializer<MyContext>(new MyInitializer());
}
public DbSet<MyModel> MyModels { get; set; }
}
}
Web.config
<connectionStrings>
<add name="MyContext" connectionString="Data Source=(localdb)\v11.0; Initial Catalog=MyContext; Integrated Security=True; MultipleActiveResultSets=True; AttachDbFilename=|DataDirectory|MyContext.mdf" providerName="System.Data.SqlClient" />
</connectionStrings>
<entityFramework>
<contexts>
<context type="MyApp.Models.MyContext, MyApp">
<databaseInitializer type="MyApp.App_Start.MyInitializer, MyApp" />
</context>
</contexts>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
</entityFramework>
我只是不知道为什么它没有播种任何数据。我已经在这里和其他地方通读了十几个或更多个类似的案例,几乎对每个迭代都进行了尝试,但仍然根本无法触发它。它甚至从未命中Seed()函数。该数据库存在,并且如果我删除它,它将被重建,但是永远不会被填充。
我倾向于我的web.config有问题,但我还没有弄清楚。有什么建议么?
最佳答案
根据this blog,直到您实际尝试访问数据库时,才会调用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();
}
关于c# - 无法获得Entity Framework MVC应用程序将数据播种到数据库,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31868395/