【问题标题】:Entity Framework on remote existing database远程现有数据库上的实体框架
【发布时间】:2012-09-15 23:07:01
【问题描述】:

我正在尝试上传一个使用 EF 4 Code First 的 MVC 项目。

我偶然发现了我只能通过管理控制台创建数据库的问题,而 EF 严格要求自己创建数据库。

如何让 EF 使用我为它创建的(已经存在但为空的)数据库?连接字符串是正确的,它可以连接,但我得到这个错误:

Model compatibility cannot be checked because the database does not contain
model metadata. Model compatibility can only be checked for databases created
using Code First or Code First Migrations.

【问题讨论】:

  • 您在代码中使用了哪个数据库初始化程序?它只需要在某些情况下创建数据库。
  • 我使用的是 AutomaticMigration。
  • 不,我的意思是您使用的是 DropCreateDatabaseIfModelChanges、DropCreateDatabaseAlways、MigrateDatabaseToLatestVersion 等?
  • 我激活了 DropCreateDatabaseIfModelChanges。
  • 请参阅下面的回答,了解以后如何避免此问题。

标签: sql-server asp.net-mvc-3 entity-framework


【解决方案1】:

当您将 DropCreateDatabaseIfModelChanges 作为初始化程序时,EF 检查模型是否有更改的方式是查看保存在数据库中的模型元数据并查看是否有任何更改。由于之前创建的数据库中没有这样的元数据(因为它是在没有 EF 的情况下创建的),所以它没有可比较的内容,因此给了你这个错误。

为避免以后出现此问题(并且不必使用控制台),请使用不同的初始化程序,例如 EF 4.3 的 MigrateDatabaseToLatestVersion。我为我的项目使用了一个现有的数据库,它工作得很好。

【讨论】:

    【解决方案2】:

    好的,我使用 NuGet 让它像这样工作:

    PM> add-migration Initial
    

    然后我将AutomaticMigrationsEnabled = false; 更改为Configuration.cs。那么:

    PM> Update-Database
    

    它毫无怨言地完成了工作。然后我再次运行该应用程序并成功了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-07
      • 1970-01-01
      • 1970-01-01
      • 2020-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多