我在Global.asax中使用以下代码:
DbDatabase.SetInitializer<MyDBContext>
(new DropCreateDatabaseIfModelChanges<MyDBContext>());
但它似乎不起作用。
虽然我的模型已经改变,而我正在尝试使用新添加的表之一,但它只是说无法找到表。
Invalid object name 'dbo.TableName'.
如果我运行它,它似乎工作,并且正在创建表:
DbDatabase.SetInitializer<MyDBContext>(new DropCreateDatabaseAlways<MyDBContext>());
它会更新我的数据库。
我做错了什么?
答案 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>();