2013-03-21 105 views
0

上我下的实体框架教程: Link实体框架代码优先外部SQL服务器

我已经下载了源代码,并跑了。该项目工作正常(使用默认连接字符串)。

<add name="SchoolContext" connectionString="Data Source=|DataDirectory|School.sdf" providerName="System.Data.SqlServerCe.4.0" /> 

接下来我更改了连接字符串以连接到远程服务器(它已成功连接)。但是,表不会创建,并且在运行应用程序和访问控制器时出现以下错误。

错误:

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. 

我的数据库用户 '的dbowner' 所以我无法想象它的数据库访问问题。

我是EF新手,对Code First Migrations不太了解。你有没有遇到过上述错误,Code Migrations能解决这个问题吗?如果是这样,为什

回答

0

这两个我都试过了初始化方法失败

Database.SetInitializer(new DropCreateDatabaseAlways<Context>()); 

以下SO帖子提供了我的问题的答案: Setting up a Entity Framework Code First Database on SQL Server 2008

我已经尝试了两者的结合,并决定最好的解决方案是手动进入SQL Management Studio并删除数据库,并使用初始化程序重新创建它,因为这允许我将Seed的内容数据库。

Database.SetInitializer<Context>(new Initializer()); 

有关更多关于种子数据库的信息,因为它也是一个相当不稳定的过程! How can I get my database to seed using Entity Framework CodeFirst?

0

从我的阅读(请纠正我,如果我错了)这里的情况是,你有一个现有的(也许是空的)远程服务器上的数据库,你希望把你的EF代码首先工作。

错误是因为我认为EF正在寻找一个_MigrationHistory表(关于什么是EF代码优先迁移已针对它运行的元数据等)并且无法找到它。对于某些背景/兴趣阅读,此表有一些合理的覆盖范围here

因此,要解决这个问题,我认为采取的步骤是:

  1. 初始化您的数据库,以便确认EF代码优先的东西
  2. 更新数据库,前滚所有迁移到日期

我发现了一些很好的覆盖范围,如何做到这一点here。这个博客一般也有一些EF主题的覆盖范围

PS。我猜你的.dsf/SQL精简版数据库不会有这个问题,因为EF代码首先会在第一次运行时为你创建它,所以它已经被确认是代码优先的数据库。

0

Here是实体框架电动工具的链接。它用于在远程服务器上通过“反向工程”创建模型。然后您可以使用EF轻松访问此数据库。

Database.SetInitializer<Context>(new Initializer()); 
Database.SetInitializer(new DropCreateDatabaseIfModelChanges<Context>()); 

但是有可能迫使数据库使用被丢弃:当数据库中已存在

Reverse Engineer Code First - Generates POCO classes, derived DbContext and Code First mapping for an existing database

+0

这将是很好,如果我有我的数据库上的数据:)我试图采取代码优先的方法。 – Jack 2013-03-22 09:31:04

+0

啊我明白了,我一定错过了那部分;)我会留下答案。也许它有助于某人 – William 2013-03-22 09:34:02