我有一个 edmx 文件,并且更改了数据库中的一个表。我知道有一个“从数据库更新模型”向导,但是在很多情况下这是没有用的。
例如,如果我将字段从非空更改为可为空,或者如果我删除字段,则更新模型不会反射(reflect)更改。我必须删除实体并将其添加回来才能使更改显示在我的模型中。
根据以下问题: How do I propagate database changes to my .edmx file?
其中一个答案似乎说了同样的事情,您需要删除实体并将其添加回来。
这是确定的答案还是有更好的方法吗?
请您参考如下方法:
以安全方式更新 EDMX:
正如您所发现的,数据库更新并不总是正确更改现有属性。
根据我们对 EDMX 更新的日常使用(24 个月内进行了 100 次更新),我建议按照以下顺序更新 EDMX。
删除现有模型然后更新:
- 打开 EDMX 设计器
- Ctrl-A 选择全部
- 删除键可删除设计器中的所有模型
- 重要提示:如果您使用 TFS 进行源代码控制,此时请勿保存 EDMX!*
- 现在右键单击并选择“从数据库更新模型”以再次重新创建整个模型。
- 重建项目以传播更改
这显然会丢失您对模型所做的任何手动调整,但如果可能,应避免手动调整。这使得整个过程可以随时重现(这是一件好事)。
重要说明:
- 如果您在 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 步之间快速更新! :)