Sql server 远程现有数据库的实体框架

Sql server 远程现有数据库的实体框架,sql-server,asp.net-mvc-3,entity-framework,Sql Server,Asp.net Mvc 3,Entity Framework,我试图上传一个MVC项目,其中我首先使用EF4代码 我偶然发现一个问题,我只能通过管理控制台创建数据库,而EF严格要求创建数据库本身 如何使EF使用我为其创建的(已存在但为空)数据库?connectionstring是正确的,它可以连接,但我得到以下错误: Model compatibility cannot be checked because the database does not contain model metadata. Model compatibility can only

我试图上传一个MVC项目,其中我首先使用EF4代码

我偶然发现一个问题,我只能通过管理控制台创建数据库,而EF严格要求创建数据库本身

如何使EF使用我为其创建的(已存在但为空)数据库?connectionstring是正确的,它可以连接,但我得到以下错误:

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.

好的,我用NuGet实现了这样的工作:

PM> add-migration Initial
然后我更改了
AutomaticMigrationsEnabled=false
配置.cs
中。然后:

PM> Update-Database

它毫无怨言地完成了任务。然后我再次运行该应用程序,它成功了。

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

PM> add-migration Initial
然后我更改了
AutomaticMigrationsEnabled=false
配置.cs
中。然后:

PM> Update-Database

它毫无怨言地完成了任务。然后我再次运行了应用程序,它成功了。

当您将DropCreateDatabaseIfModelChanges作为初始值设定项时,EF检查模型是否有更改的方法是查看保存在数据库中的模型元数据,并查看是否有任何更改。由于先前创建的数据库中没有这样的元数据(因为它是在没有EF的情况下创建的),所以它没有任何可与之比较的内容,因此会给您带来该错误


为了避免这个问题(并且不必使用控制台),请使用不同的初始值设定项,例如EF 4.3的MigrateDatabaseToLatestVersion。我在我的项目中使用了一个现有的数据库,它工作得很好。

当您使用DropCreateDatabaseIfModelChanges作为初始值设定项时,EF检查模型是否有更改的方法是查看保存在数据库中的模型元数据,并查看是否有任何更改。由于先前创建的数据库中没有这样的元数据(因为它是在没有EF的情况下创建的),所以它没有任何可与之比较的内容,因此会给您带来该错误


为了避免这个问题(并且不必使用控制台),请使用不同的初始值设定项,例如EF 4.3的MigrateDatabaseToLatestVersion。我在我的项目中使用了一个现有的数据库,它工作得很好。

您在代码中使用了哪个数据库初始值设定项?它只需要在某些情况下创建数据库。我使用的是自动迁移。不,我的意思是您使用的是DropCreateDatabaseIfModelChanges、DropCreateDatabaseAlways、MigratedDatabaseTolatesVersion,等等?我让DropCreateDatabaseIfModelChanges处于活动状态。关于如何在将来避免此问题,请参见下面的答案。您在代码中使用了哪个数据库初始值设定项?它只需要在某些情况下创建数据库。我使用的是自动迁移。不,我的意思是您使用的是DropCreateDatabaseIfModelChanges、DropCreateDatabaseAlways、MigratedDatabaseToLateStVersion等吗?我的DropCreateDatabaseIfModelChanges处于活动状态。有关如何在将来避免此问题,请参阅下面的答案。