更新您的 edmx 以反映您的数据库中所做的更改(.net linq-to-entities)

Posted

技术标签:

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

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

【问题讨论】:

【参考方案1】:

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

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

在我找到的 edmx xml 中:

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

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

【讨论】:

【参考方案2】:

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

【讨论】:

【参考方案3】:

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

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

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

【讨论】:

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

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

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

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

这将更新 .tt 文件。

来源:here!

【讨论】:

您的答案与 Peter Klein 的有何不同?【参考方案5】:

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

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

【讨论】:

【参考方案6】:

这是最快最简单的方法:

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

【讨论】:

这并不总是恢复实体之间的导航属性 不能再同意了。现在,在 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 属性。

【讨论】:

他在问题中说“更新模型”不起作用。虽然内容丰富,但您的帖子实际上并不能解决问题。 我同意,在模型浏览器中查看时 - 模型部分已更新,但存储部分包含旧元数据,无法更改其中的属性。

以上是关于更新您的 edmx 以反映您的数据库中所做的更改(.net linq-to-entities)的主要内容,如果未能解决你的问题,请参考以下文章

react native 项目中 app.js 文件中所做的更改未反映

如何刷新 UICollectionView 以反映对我的数据源所做的最新更改?

在 MySQL 中更新视图

如何在本地测试对 Jenkinsfile 所做的更改?

在 psql shell 中所做的更改不会显示在 Datagrip 会话中

将网页部署到 firebase 主机不会反映所做的所有更改,具体取决于加载页面的设备。颤振网页