【问题标题】:Entity Framework Code First on external SQL server外部 SQL 服务器上的实体框架代码优先
【发布时间】:2013-03-25 03:50:48
【问题描述】:

我正在关注以下实体框架教程: Link

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

<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 迁移了解不多。您是否遇到过上述错误,代码迁移会解决这个问题吗?如果有,为什么?

【问题讨论】:

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


    【解决方案1】:

    根据我的阅读(如果我错了,请纠正我),这里的情况是您在远程服务器上有一个现有的(可能是空的)数据库,您希望将您的 EF 代码优先工作放入其中。

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

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

    1. 初始化您的数据库,使其承认 EF 代码优先的内容
    2. 更新数据库,将所有迁移前滚到当前

    我发现了一些关于如何做到这一点的很好的报道here。这个博客也对 EF 主题有一些很好的覆盖

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

    【讨论】:

      【解决方案2】:

      Here 是指向 Entity Framework Power Tools 的链接。它用于通过“逆向工程”远程服务器上的数据库来创建模型。然后,您可以使用 EF 轻松访问此数据库。

      逆向工程师 Code First - 为现有数据库生成 POCO 类、派生 DbContext 和 Code First 映射

      【讨论】:

      • 如果我的数据库中有数据,那就太好了 :) 我正在尝试采用代码优先的方法。
      • 啊,我明白了,我一定错过了那部分;)我会留下答案。也许它可以帮助某人
      【解决方案3】:

      当数据库已经存在时,我尝试过的两种初始化方法都失败了:

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

      但是可以使用以下命令强制删除数据库:

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

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

      我尝试了两者的结合,并决定最好的解决方案是手动进入 SQL Management Studio 并 DROP 数据库,然后使用初始化程序重新创建它,因为这允许我播种数据库。

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

      请参阅此处以获取有关为数据库播种的更多信息,因为它也是一个非常不稳定的进程! How can I get my database to seed using Entity Framework CodeFirst?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-08-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-10
        • 2015-02-24
        • 2021-01-05
        相关资源
        最近更新 更多