我承认在这个问题上有点疯狂,所以请耐心等待。我一直在尝试这样做约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/

10-13 06:37
查看更多