【问题标题】:Entity Framework : How do you refresh the model when the db changes?实体框架:当数据库更改时如何刷新模型?
【发布时间】:2011-02-26 05:05:14
【问题描述】:

如果你从数据库构建 edmx 文件,然后 db 发生变化,你如何让模型接受变化?

您是删除整个模型并重新生成还是可以检测到更改?

我看到一篇文章提到“更新您的模型”rt。 edmx 文件上的鼠标命令,但我没有看到它。

Updating your edmx to reflect changes made in your db (.net linq-to-entities)

我才刚刚开始。

【问题讨论】:

  • 它不在 edmx 文件中,而是在图形界面中。双击左键在图形编辑器中打开 edmx,您会在此处找到“更新模型”。

标签: entity-framework


【解决方案1】:

您查看的是设计器视图还是代码视图?您可以通过右键单击您的 EDMX 文件并选择 Open With -> ADO.NET Entity Data Model Designer 来强制打开设计器

右键单击 EDMX 设计器的设计器表面,然后单击 Update Model From Database...

默认情况下会刷新所有实体,仅当您选择它们​​时才会添加新实体。


编辑: 如果不是很清爽。

  • 选择 EDMX 设计器中的所有表和视图。
  • 删除它们。
  • 然后,从数据库更新模型

【讨论】:

  • 当鼠标右键单击 edmx 文件时,我没有看到“带有 -> ADO.NET 实体数据模型设计器的笔”选项,但其他选项可用。我想知道为什么,但你提供了一个有效的答案。泰。
  • 右击 edmx 文件并选择打开方式,然后选择数据模型设计器
  • 是否可以以编程方式执行此操作?我想将此作为我构建过程的一部分。
  • 刚刚更改了外键。他们没有刷新。不得不从模型中删除表,然后重新添加。
  • 如果您发现更新没有按预期工作可以查看参考----stackoverflow.com/questions/15545469/…
【解决方案2】:

我发现设计器“从数据库更新”只能处理小的更改。如果您删除了表、更改了外键或(喘气)使用函数映射更改了存储过程的签名,您最终将进入如此混乱的状态,您将不得不删除所有实体并“从数据库添加”或者干脆删除 edmx 资源并重新开始。

【讨论】:

  • “从数据库更新”向导替换了 SSDL,但仅对 CSDL 应用了一些更改。因此,当您进行更复杂的更改时,SSDL 和 CSDL 往往会不同步,从而导致您看到的“混乱状态”。我有一个插件可以为 VS2010 中的 EF4 设计器解决这个问题;它比较三层(DB、SSDL、CSDL)中的每一层,显示所有差异并允许您有选择地同步差异。如果您想试用,可以在huagati.com/edmxtools 下载插件并获得试用许可证。
【解决方案3】:

这可能会对你们有所帮助。(我已将此应用于我的项目)

这里有 3 个简单的步骤。

  1. 转到您的解决方案资源管理器。查找 .edmx 文件(通常在根级别找到
  2. 打开该 .edmx 文件,会出现一个 模型图 窗口。右键单击该窗口的任意位置,然后选择“Update Model from Database”。 更新向导窗口出现。点击完成以更新您的模型。
  3. 保存该 .edmx 文件。

就是这样。它将根据您数据库上的更改同步/刷新您的模型。

详细说明。请访问以下链接。

EF Database First with ASP.NET MVC: Changing the Database 并更新其模型。

【讨论】:

  • 注明。感谢您的建议。
【解决方案4】:

无法自动更新 CodeFirst 模型。我也不推荐。 因为代码优先的好处之一是您可以使用 POCO 类。如果您更改了此 POCO 类,您不希望某些自动生成的代码破坏您的工作。

但是您可以创建一些模板解决方案,将您更新/添加的实体添加到新模型中。然后收集新的 cs 文件并将其移动到您的工作项目中。 这样,如果它是一个新实体,您就不会发生冲突,您只需将相关的 cs 文件添加到现有项目中即可。如果是更新,只需从文件中添加一个新属性。 如果您只是将几列添加到一个或两个表中,您可以手动将它们添加到您的 POCO 类中,您不需要任何额外的工作,这就是使用 Code-First 和 POCO 类的美妙之处。

【讨论】:

    【解决方案5】:

    这里:

    1. 从 EDMX 设计器中删除表
    2. 重建项目/SLN(这将清除模型类)
    3. 从数据库更新模型(读取所有需要的表)
    4. 重建项目/SLN(这将重新创建您的模型类,包括新列)

    【讨论】:

      【解决方案6】:

      但你需要小心, 您需要在删除之前完全设置 EDMX 文件(如果您选择删除/重新生成路线),否则,您的代码和 EF 生成的模型之间的命名不匹配(特别是对于复数和单数化)

      希望这能防止你头疼 =)

      【讨论】:

        【解决方案7】:

        我只需要更新一个 .edmx 模型。模型/运行自定义工具选项并没有为我刷新字段,但是一旦我打开图形设计器,我就可以手动重命名字段。

        【讨论】:

          【解决方案8】:

          双击 .edmx 文件,然后右键单击屏幕上的任意位置并选择“从数据库更新模型”。 在新窗口中,转到“刷新”选项卡并选择更改的表/视图,然后单击“完成”。

          【讨论】:

            【解决方案9】:

            我一直在做一个不太大的项目,它包含实体框架、大约十几个表以及大约 15 个存储过程和函数。经过数周的开发,就成功更新模型而言,尝试刷新我的表和存储过程的结果喜忧参半。有时这些更改是有效的,但大多数时候它们不是。简单的列更改(更改顺序、添加、删除或重命名)有时有效,但大多数时候无效。 Visual Studio 在刷新方面似乎比仅仅添加新的问题更多。它还表现出更多未反映存储过程更改的问题,尤其是在添加、删除或重命名列时。我没有检测到任何一致的行为,所以我不能说“这种类型的更改将始终更新,而这种类型的更改不会”。

            最终结果,如果您想要 100% 有效的解决方案,请从项目中删除 EDMX 文件,将“添加新”项添加到项目(ADO.NET 实体数据模型),并确保模型名称使用相同的名称.这每次都有效。

            【讨论】:

              猜你喜欢
              • 2011-03-10
              • 2015-09-21
              • 2011-04-28
              • 2011-04-26
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-06-06
              相关资源
              最近更新 更多