我的问题最初是: 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):
数据库中已有一个名为“博客”的对象。
答案 0 :(得分:0)
每当Model更改时,您必须告诉web.config文件使用初始化程序类。在web.config文件的entityFramework标记中添加以下代码。希望它能起作用..
<contexts>
<context type="YourProjectName.BlogContext,YourProjectName">
<databaseInitializer type="YourProjectName.DataInitializer , YourProjectName" />
</context>
</contexts>