【问题标题】:After updating Entity Framework model, Visual Studio does not see changes更新实体框架模型后,Visual Studio 看不到变化
【发布时间】:2012-11-19 19:39:02
【问题描述】:

如果我对我的 EF 5.0 模型进行任何更改,VS 似乎看不到这些更改。我尝试添加一个新表,该表在模型中显示良好,但如果我尝试在某处使用它,则该表不会显示在智能感知中,我无法使用它。

我还尝试更改列的数据类型,如果我查看 .edmx 模型文件,这再次显示良好,但由于我试图分配不正确的数据类型,Visual Studio 仍然会在该字段上给我编译器错误。

如果我完全删除 EDMX,然后重新创建它,那么更改就可以正常工作。但是每次我应该能够“从数据库更新模型”并重建时,从数据库重新生成是很烦人的。

我以前从未遇到过 EF 的这些问题。有谁知道这个问题的原因或解决方法?

谢谢。

【问题讨论】:

  • 您的 edmx 的代码生成策略是什么? (打开 edmx,按 F4)
  • @Heather 设置为“无”。我尝试将其更改为“默认”,认为这一定是问题所在,现在我有几十个错误说类型 [table] 已经包含我拥有的每个表/列的 [column] 定义。有什么想法吗?
  • 是的,您已经解决了问题的前半部分。 “无”根本不会生成代码。现在您正在生成代码,您需要解决数据库和 edmx 之间的逻辑不一致问题。一般来说,有两种方法可以做到这一点:第一种是从 edmx 中删除每个实体,然后从数据库运行更新。
  • @Heather 我似乎无法找到我收到错误的原因。据我所知,所有字段只定义一次,在它生成的 .cs 文件中。
  • 好像在某个地方有两个完全相同的 .cs 文件,但我只能归档一个,而且我只收到一组错误。

标签: c# entity-framework entity-framework-5


【解决方案1】:

首先构建您的项目,如果成功,请右键单击 "model.tt" 文件并选择运行自定义工具。它会修复它。

再次构建您的项目并指向 "model.context.tt" 运行自定义工具。它将更新 DbSet 列表。

【讨论】:

  • 非常感谢!这个错误似乎在 VS2013 Update 3 中又出现了,但遵循这个提示是一个快速而简单的解决方法。
  • 非常感谢。我必须先显示排除的项目,然后重新包含 .tt 才能运行该工具。
  • 用 VS2019 也解决了我的问题。这似乎与我认为以前没有“潜在伤害”警告框的事实有关
【解决方案2】:

如果这是位于文件夹中的 edmx 文件的错误,现在已修复 - 下载并安装 VS 2012 Update 1。您可以从以下地址获取它:http://www.microsoft.com/visualstudio/eng/downloads#d-visual-studio-2012-update

【讨论】:

  • 遇到了同样的问题,安装了更新,刷新 edmx 中的表后它就可以工作了。 EF 4.4 版,是时候修复这个问题了!
  • 请注意。当使用 EF 的多个解决方案打开时不起作用。必须关闭它们才能让 VS 捕捉到变化。 (即使有完全独立的项目。)
  • 我有 VS 2013 Update 1,但同样的错误发生了。
【解决方案3】:

这显然是实体框架中的一个错误,即当您的 Edmx 文件位于文件夹内时,模型不会更新。 目前可用的解决方法是:

  1. 安装 VS 2012 Update 1 应该可以修复错误。
  2. 如果您无法安装 Update 1,则必须右键单击 model.tt T4 模板文件并单击运行自定义工具。这将为您更新课程。

希望对那里的人有所帮助。

链接:http://thedatafarm.com/blog/data-access/watch-out-for-vs2012-edmx-code-generation-special-case/

【讨论】:

  • 现在已修复 - 请参阅我的其他回复。
  • 哈哈不错的 Pawel,看起来我们在一小时内发布了相同的解决方案。
  • 这似乎又是 VS 2013 Update 3 中的一个错误,运行自定义工具为我修复了它。
【解决方案4】:

我也遇到了这个问题,但是,右键单击 model.tt 文件并运行“自定义工具”对我没有任何影响,但是 Ghlouw 链接到的页面上的评论提到使用菜单项目“构建 > 转换所有 T4 模板”。这是为我做的

【讨论】:

    【解决方案5】:

    右键单击.tt 文件并选择“运行自定义工具”,应该会更新它:

    【讨论】:

      【解决方案6】:

      您应该在某处有一个<XXX>Model.tt 文件,它是生成模型类的 T4 模板。

      如果在不同的项目中,保存edmx文件时不会更新。

      无论如何,尝试在解决方案资源管理器中右键单击它并选择Run Custom Tool

      【讨论】:

      • 反之亦然:如果您在没有保存 edmx 文件的情况下选择 Run Custom Tool,实体将不会更新。
      【解决方案7】:

      我搜索了这个答案,因为我在VS2013中遇到了类似的情况。就我而言,我发现一个简单的“Clean Solution”清除了所有旧定义。

      【讨论】:

        【解决方案8】:

        您在从事 N 层项目吗?如果是这样,请在使用之前尝试重建您的数据层(或存储 EDMX 文件的任何位置)。

        【讨论】:

        • edmx 与我使用它在同一个项目中。我已经尝试注释掉编译器错误,无论如何重建它,但没有成功。
        • 我会研究一下希瑟对你的问题的建议。在您的情况下,代码生成策略应设置为默认值。
        • 我还会检查您的表格和列,确保它们可以公开访问。
        【解决方案9】:

        我也遇到过这个问题,在 model.tt 文件下没有生成任何类。就我而言,这取决于我如何在 SQL2012 中构建数据库的问题。我将表中的一列设置为可为空的,这也是一个外键,虽然我认为你应该能够做到这一点,但它在 EF5 中引起了问题。

        一旦这被清除并且图表从数据库中更新,它们就会重新出现。

        EF5 VS2013

        【讨论】:

          【解决方案10】:

          更换笔记本电脑后当我更新实体框架模型时,代码中看不到存储过程

          我做了什么来使它工作

          • 更新 Visual Studio 2012 更新 5(不工作)
          • 从程序更新/修改(不工作)
          • 更新存储过程后,再次构建项目然后进入context.cs,右键运行自定义工具(不工作)
          • 做 RND(有人说问题是由于 MSSQL 中的一些权限)但不幸的是,我在 MSSQL 中做了很多权限但(不工作)
          • 安装 2019 并运行项目。现在一切正常

          结论

          • Visual Studio 2012 有一个错误(错误已在更新 1、2、3 和 4 中解决)
          • 更改 Visual Studio 版本将解决问题

          【讨论】:

            猜你喜欢
            • 2021-12-02
            • 1970-01-01
            • 2014-04-26
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多