Skip to main content
 首页 » 编程设计

entity-framework之如何使用数据库更改更新 edmx 文件

2024年06月20日65Renyi-Fan

我有一个 edmx 文件,并且更改了数据库中的一个表。我知道有一个“从数据库更新模型”向导,但是在很多情况下这是没有用的。

例如,如果我将字段从非空更改为可为空,或者如果我删除字段,则更新模型不会反射(reflect)更改。我必须删除实体并将其添加回来才能使更改显示在我的模型中。

根据以下问题: How do I propagate database changes to my .edmx file?

其中一个答案似乎说了同样的事情,您需要删除实体并将其添加回来。

这是确定的答案还是有更好的方法吗?

请您参考如下方法:

安全方式更新 EDMX:

正如您所发现的,数据库更新并不总是正确更改现有属性。

根据我们对 EDMX 更新的日常使用(24 个月内进行了 100 次更新),我建议按照以下顺序更新 EDMX。

删除现有模型然后更新:

  1. 打开 EDMX 设计器
  2. Ctrl-A 选择全部
  3. 删除键可删除设计器中的所有模型
  4. 重要提示:如果您使用 TFS 进行源代码控制,此时请勿保存 EDMX!*
  5. 现在右键单击并选择“从数据库更新模型”以再次重新创建整个模型。
  6. 重建项目以传播更改

这显然会丢失您对模型所做的任何手动调整,但如果可能,应避免手动调整。这使得整个过程可以随时重现(这是一件好事)。

重要说明:

  • 如果您在 Visual Studio 中打开了自动保存功能,则需要快速选择更新(上述第 5 步),以避免自动保存所有内容。
  • 如果您使用 TFS 进行源代码控制,并且碰巧在清空 EDMX 后保存了它,TFS 会将所有生成的文件标记为“已删除”,并且再次更新 EDMX 可能会导致文件断开连接,而这些文件不在源代码控制!.
  • 此过程不会更新任何存储过程。此外,我发现刷新 EDMX 也不会更新仅返回类型已更改的存储过程(截至 EF 6.1.1 仍然有效)。

其他建议:

将您的 EDMX 保存在单独的库中。这也成为添加额外 TT 文件和部分类(例如扩展 EDMX 模型的功能)的好地方。我还将数据库上下文的任何扩展方法放置在这个库中。 迁移文件在库中生成,也很好地包含了所有内容。

2015 年 4 月更新

Visual Studio 2013 的最新版本 4 似乎已经解决了许多 TFS 问题。现在,我们看到 Visual Studio checkout 生成的文件,如果它们未更改,则将其恢复。上述步骤似乎仍然是最安全的方法。

2015 年 9 月更新

使用最新的 VS2013 Release 5,如果在 EDMX 更新期间发生保存,我们仍然会遇到问题。您仍然可能会遇到这样的情况:挂起的删除会导致您的 tt 文件在更新期间从源代码管理中删除。秘诀是在第 4 步和第 5 步之间快速更新! :)