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

Jos*_*osh 3 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 Model结构方面与我的新项目相同?我该怎么解决?我知道我可以做自己的初始化程序(如何在Entity Framework 4.3 Code First中禁用__MigrationHistory表?),但我更希望了解正在发生的事情并在源代码处进行修复,而不是在源代码周围进行修复。

Vah*_*idN 5

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

PM> enable-migrations
PM> add-migration Initial -IgnoreChanges
PM> update-database
Run Code Online (Sandbox Code Playgroud)

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

  • “ MigrationHistory”表包含您的域模型的散列以及数据库中的现有表。如果您更改模型之一,EF可以再次计算此哈希并将其与“ MigrationHistory”表中的旧值进行比较,然后再次更新数据库。但是,如果您手动更改数据库,则会发现数据库中发生了某些更改,因为哈希值不同,但是这次它不知道如何解决此冲突。因此,在代码优先方法中,请勿尝试像数据库优先方法那样进行行为/设计。 (2认同)