EF Code First:DropCreateDatabaseIfModelChanges不起作用

时间:2011-03-21 09:48:45

标签: c# entity-framework ef-code-first entity-framework-4.1

我在Global.asax中使用以下代码:

DbDatabase.SetInitializer<MyDBContext>
   (new DropCreateDatabaseIfModelChanges<MyDBContext>());

但它似乎不起作用。

虽然我的模型已经改变,而我正在尝试使用新添加的表之一,但它只是说无法找到表。

Invalid object name 'dbo.TableName'.

如果我运行它,它似乎工作,并且正在创建表:

DbDatabase.SetInitializer<MyDBContext>(new DropCreateDatabaseAlways<MyDBContext>());

它会更新我的数据库。

我做错了什么?

4 个答案:

答案 0 :(得分:10)

对于它的价值,我在使用DropCreate策略的两个时遇到了很多麻烦,因为在我关闭浏览器后Cassini仍在运行。 (我对IIS Express也有同样的问题。)因为本地Web服务器仍在运行,Application_Start没有再次触发,所以我放在那里的初始化从未执行过。

我通过启用“编辑并继续”来解决此问题:

项目属性&gt; 网络&gt; 调试器&gt; 启用编辑并继续

这会在浏览器关闭时强制关闭本地Web服务器。

答案 1 :(得分:8)

原来是master数据库的用户权限。奇怪的是,使用DropCreateDatabaseAlways不需要master数据库的权限,而IfModelChanges则需要权限。

答案 2 :(得分:4)

我遇到了同样的问题:

Database.SetInitializer(new DropCreateDatabaseIfModelChanges<BreakAwayContext>());

在我的情况下,当我添加上面的代码行时,数据库已经存在。我删除了数据库并再次运行我的程序,它开始按预期工作。只有其他冲突才有可能是因为我一直在玩“启用 - 迁移”#39;在数据库上。

HTH

答案 3 :(得分:1)

如果您删除了IncludeMetadataConvention,则会出现此行为: modelBuilder.Conventions.Remove<System.Data.Entity.Database.IncludeMetadataConvention>();