【问题标题】:Updating your edmx to reflect changes made in your db (.net linq-to-entities)更新您的 edmx 以反映您的数据库中所做的更改(.net linq-to-entities)
【发布时间】:2010-10-15 23:17:53
【问题描述】:
  • 所以我制作了我的 edmx。
  • 然后我稍微更改了我的数据库,将列从 NOT NULL 更改为允许 NULL。
  • 我进入我的 edmx,右键单击并选择“从数据库更新模型”

现在我进入我的程序,它实际上并没有更新...我不能在列中放置一个空值。我该怎么做才能正确更新 edmx?谢谢。

【问题讨论】:

    标签: linq entity-framework .net-3.5 linq-to-entities


    【解决方案1】:

    我在数据库中创建的视图没有出现在设计器中(在选择“从数据库更新模型...”并在视图名称旁边添加一个检查之后)。在将 EDMX 切换到 xml 视图之前,我没有看到任何错误消息:

    • 右击edmx文件
    • 选择“打开方式...”
    • 选择“自动编辑器选择器 (XML)”
    • 点击查找并搜索您的视图名称

    在我找到的 edmx xml 中:

    "生成过程中发现错误:警告 6013: The table/view '(view name)' 没有定义主键,也没有有效的主键 可以推断。此表/视图已被排除。要使用 实体,您将需要检查您的架构,添加正确的键,并 取消注释。”

    我将视图修改为具有主键。然后我打开 edmx 设计器并运行“从数据库更新模型...”,然后视图按预期出现在设计器中,没有错误。

    【讨论】:

      【解决方案2】:

      从设计器视图中删除所有表格并在此之后更新对我有用

      【讨论】:

        【解决方案3】:

        我成功完成的是这个(VB.Net)。

        1. 根据需要/需要更新数据库
        2. 在 EDMX 模型中选择“从数据库更新”,图形模型将正确显示新的结构/表
        3. 展开项目以显示所有相关文件
        4. 具有“tt”扩展名的两个文件是重要的:首先取一个没有 .Context 的文件。在 tt 扩展之前。右键单击它并选择运行自定义工具:

        1. 对带有 .Context 的 .tt 文件执行相同的操作。以其名义。您的所有代码和逻辑模型类都将更新。

        【讨论】:

        • 我也是这样做的:),这应该是公认的答案
        • 这应该是公认的答案。另外请确保在“从数据库更新”之后保存 EDMX 模型
        • 我曾经使用“删除并重新添加”的方法。今天,我不得不在我们的大型模型的中心实体中修改一些列长度。删除和重新添加只是破坏了很多东西,而这种方法挽救了我的一天。此外,删除并重新添加的项目通常会变为未版本化。
        • 这项工作......应该被接受的答案。 ...接受的答案在我的情况下不起作用。
        【解决方案4】:

        1.更新EDMX文件后构建项目。

        2.在解决方案资源管理器中右键单击您的 .tt 文件。

        3.选择“运行自定义工具”选项。

        这将更新 .tt 文件。

        来源:here!

        【讨论】:

        • 您的答案与 Peter Klein 的有何不同?
        【解决方案5】:

        这个答案更好:https://stackoverflow.com/a/23886016/1014884

        任何手动编辑都容易出错,或者当有人使用任何工具(如向导)时会丢失。使用向导删除和更新要好得多。

        【讨论】:

          【解决方案6】:

          这是最快最简单的方法:

          1. 从 .edmx 图表中删除视图/表格。
          2. 现在使用从数据库中更新模型重新添加表。

          【讨论】:

          • 这并不总是恢复实体之间的导航属性
          • 不能再同意了。现在,在 EF6 中,使用 EF 的“从数据库更新模型”和以往一样无望。删除表,重新添加它,然后您将看到表结构的任何更改。加油微软...解决这个问题...
          【解决方案7】:

          从 EDMX 更新/删除并不总是有效。如果在单击从数据库中更新模型时模型没有得到更新,假设您在数据库中更新了视图/表,请执行以下操作:

          1) 从模型图中删除视图/表格
          2) 将 EDMX 切换到 xml 视图(右键单击 edmx 文件并选择“打开方式”)
          3) 查找和删除xml实体元素
          4) 切换回 EDMX 视图
          5) 点击从数据库更新模型

          这应该反映您对数据库所做的任何类型的更改到您的 EDMX。这很麻烦,但可以完美运行。

          在理想情况下,我希望数据库中的更新模型能够将数据库中的更改同步到 EDMX。但是,它大部分时间都不起作用。

          【讨论】:

          • Huagati 有一个刷新 edmx 文件的工具,但它不是免费的。 huagati.com/dbmltools
          • 我对列大小进行了更新,但它没有在数据模型中刷新,所以这不可靠。最好的选择是重新添加实体或手动更改属性(就像我的情况一样)。感谢您的回答。
          • 是的,您可以这样做,但您没有从 db 获得所有更新,这不是有点奇怪吗?我不想在 db 中每次更改架构时添加删除实体...对我来说效率很低..
          • "3) 搜索并删除 xml 实体元素" 有人可以详细说明这一步需要什么吗?
          • 当您需要在属性或 StoreGeneratedPattern 上指定枚举类型时,删除实体以重新添加它们是不可接受的,因为它会导致这些东西的丢失。
          【解决方案8】:

          它不会更新例如字符串属性的最大长度!

          如果您使用 TFS,删除文件是不好的,您希望保留历史记录而不影响其他人。

          对我来说,它有一个单独的小项目,我可以用它来完全重新创建 edmx 文件,我在 xml 中打开它,复制粘贴到现有的,然后在模型中移动一个形状,以便 VS 重新创建.cs 文件。瞧,它现在更新了。

          【讨论】:

          • 有第三方工具可以保持同步,包括最大长度、精度/比例、默认值、身份/计算等。一个工具是我的 VS2010 插件。如果您想看到它的实际效果,请观看以下两篇博客文章中的截屏视频:bit.ly/cTbrePbit.ly/cCbnrn 如果您想尝试一下,可以在huagati.com/dbmltools 下载插件并获得试用许可证...
          • 我注意到 VS2013,TFS - 如果我在设计中工作并调整实体,它会删除 .CS 支持文件并重新创建它。这有效地将其从 TFS 中删除,并且我必须继续重新添加这些问题。
          • 删除东西的大锤解决方法:切换到 git-tfs 并告别大多数 tfs 困境。 git-tfs.com
          【解决方案9】:

          在 VS 的 XML 编辑器中打开 edmx 文件并检查尝试更新时是否产生错误。

            <!--Errors Found During Generation:
                warning 6013: The table/view 'foo.dbo.snafu' does not have a primary key   
                defined and no valid primary key could be inferred. This table/view has  
                been excluded. To use the entity you will need to review your schema,  
                add the correct keys and uncomment it.
          
            <EntityType Name="snafu">
              <Property Name="snafu_column" Type="smallint" />
            </EntityType>-->
          

          在上述情况下...向相关表添加主键会导致“从数据库更新模型”工作。

          【讨论】:

            【解决方案10】:

            是的,它大部分时间都不起作用:-/

            “最佳方法”(因为它可以系统地工作)是删除 EDMX 文件并重新生成它。 但是不要忘记把App.config中的连接字符串去掉(否则VS2008 wizzard会在默认的实体名称后面加一个后缀),并清除缓存。

            我希望这些工具在下一个版本中能更好地工作,因为它会大大降低生产力...

            【讨论】:

            • 遗憾的是,在 VS 2010 RC2 中它仍然可以正常工作。我同意 - 它适得其反并且容易出错。删除 EDMX 文件是使其工作的唯一 100% 验证方法。
            【解决方案11】:

            从数据库中选择更新模型是更新 EDMX 的最佳方法。某些属性不会在概念层上更新。

            通过在 Model Viewer 工具箱中查看您的 Store 层,确保其已更新。如果 Store 已正确更新,那么您就可以了,并且您的数据库已同步。如果是这样,请进入可视化设计器,单击字段,转到属性,然后在概念端更新 NotNull 属性。

            【讨论】:

            • 他在问题中说“更新模型”不起作用。虽然内容丰富,但您的帖子实际上并不能解决问题。
            • 我同意,在模型浏览器中查看时 - 模型部分已更新,但存储部分包含旧元数据,无法更改其中的属性。
            猜你喜欢
            • 1970-01-01
            • 2013-08-22
            • 1970-01-01
            • 1970-01-01
            • 2019-05-06
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-09-11
            相关资源
            最近更新 更多