EF:Migrations的种子。配置与DropCreateDatabaseAlways的种子?

时间:2016-09-17 15:00:40

标签: c# entity-framework ado.net ef-migrations

我的问题最初是: DropCreateDatabaseIfModelChanges无法更新数据库?

但是我改变了它,因为这两种方法的作用对我来说更加模棱两可

...................

到目前为止,我知道使用DropCreateDatabaseIfModelChanges将在架构更改时重新创建数据库(IfModelChanges)。这意味着我不必担心迁移,因为它无论如何都会从头开始重新创建数据库,对吧? 我首先创建了一个继承自DataInitializer的类DropCreateDatabaseIfModelChanges,并使用初始数据实现了Seed方法,并调用了Database.SetInitializer(new DataInitializer());Main方法,但我仍然得到关于模型更改的错误,我应该添加一个迁移(因为我从实体中删除了一个属性来测试数据初始化)。 这是初始化类:

public class DataInitializer : DropCreateDatabaseIfModelChanges<BlogContext>
    {
        protected override void Seed(BlogContext context)
        {
            var blogs = new List<Blog>
            {
                new Blog {FollowersCount=456, Name="ABC", Url="abc.com" },
                new Blog {FollowersCount=789, Name="DEF", Url="def.com" },
                new Blog {FollowersCount=246, Name="GHI", Url="ghi.com" },
                new Blog {FollowersCount=135, Name="JKL", Url="jkl.com" },
                new Blog {FollowersCount=258, Name="MNO", Url="mno.com" },
            };
            blogs.ForEach(x => context.Blogs.Add(x));
        }
    }

这些是我的问题:如果启用了迁移,它是否有效?如果我在Configuration类中使用初始数据实现Seed方法会发生什么 - 将调用哪一个(我有一个使用数据初始化的Seed方法)已经在Configuration类中)

添加迁移后,它会抛出此错误(无论我是否调用了SetInitializer):

  

数据库中已有一个名为“博客”的对象。

1 个答案:

答案 0 :(得分:0)

每当Model更改时,您必须告诉web.config文件使用初始化程序类。在web.config文件的entityFramework标记中添加以下代码。希望它能起作用..

<contexts>
    <context type="YourProjectName.BlogContext,YourProjectName">
      <databaseInitializer type="YourProjectName.DataInitializer , YourProjectName" />
    </context>
</contexts>