16

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

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

但它似乎不起作用。

虽然我的模型已经改变并且我正在尝试使用新添加的表格之一,但它只是说找不到该表格。

Invalid object name 'dbo.TableName'.

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

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

它确实更新了我的数据库。

我做错了什么?

4

4 回答 4

10

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

我通过启用编辑并继续解决了这个问题:

项目属性> Web >调试器>启用编辑并继续

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

于 2011-03-25T22:58:11.627 回答
8

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

于 2011-05-11T09:47:19.313 回答
4

我有同样的问题:

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

就我而言,当我添加上述代码行时,数据库已经存在。我删除了数据库并再次运行我的程序,它开始按预期工作。只有其他冲突可能是我一直在使用数据库上的“启用迁移”的原因。

高温高压

于 2012-03-17T21:27:03.390 回答
1

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

于 2011-03-21T11:47:22.520 回答