EF6数据库优先 - EF尝试创建我的数据库(但所有表已经存在)

时间:2015-03-03 04:17:06

标签: c# asp.net-mvc entity-framework

好的,我有点背景如何来到这里。我正在重建一个旧的MVC3网站。我有一个最近的Database First MVC5 EF6项目,我想使用相同的UI包。我复制了现有的项目,并且几乎所有项目都被删除了(所有项目特定的POCO模型,DbContext,视图等)基本上我只是将新的Identity内容和我的UI框架一起留在那里。

我创建了脚本来手动将我的数据库从SQLMembership转换为Identity 2.0(以及一些密码转换代码)。一切都很顺利,编译后,我可以作为现有用户登录。

下一步,我创建了一个新的临时项目(我不想弄乱实际的项目名称空间),从新数据库为所有现有表生成POCO模型,将它们复制到我的项目中只需手动编写DataModel Fluent API代码。我在模型生成上遇到了一些验证错误,我没有解决任何问题。但是现在我在尝试执行任何可以访问已经存在__MigrationHistory的DataModel时发生异常错误。

查看EF SQL调试输出的进一步调查显示它正在尝试运行脚本来创建我的数据库中的所有表,它最终在尝试创建__MigrationHistory表时抛出错误,因为它已经存在(尽管我应该注意它没有记录。)

那我在做什么呢? EF如何知道在我的其他项目中没有尝试这样做,并且在DataModel结构和POCO模型结构方面与我的新项目相同?我该怎么做才能解决这个问题?我知道我可以创建自己的初始化程序(How can I disable the use of the __MigrationHistory table in Entity Framework 4.3 Code First?),但我更愿意了解正在发生的事情并修复源代码而不是围绕它编写代码。

1 个答案:

答案 0 :(得分:4)

删除项目中的现有Migrations文件夹。从现有数据库中删除表“__MigrationHistory”。现在您可以重建此历史记录表:

PM> enable-migrations
PM> add-migration Initial -IgnoreChanges
PM> update-database

-IgnoreChanges创建空的Up()方法,它不会对现有对象进行任何更改。