我有一个 edmx 文件,并且更改了数据库中的一个表。我知道有一个“从数据库更新模型”向导,但在许多情况下这是无用的。
例如,如果我将字段从非空更改为可为空,或者如果我删除字段,则更新模型不会反映更改。我必须删除实体并将其添加回来才能使更改出现在我的模型中。
根据以下问题:如何将数据库更改传播到我的 .edmx 文件? https://stackoverflow.com/questions/5432830/how-do-i-propagate-database-changes-to-my-edmx-file
其中一个答案似乎说了同样的事情,您需要删除实体并将其添加回来。
这是最终的答案还是有更好的方法来做到这一点?
更新 EDMXsafe way:
正如您所发现的,数据库更新并不总是正确更改现有属性。
根据我们对 EDMX 更新的日常使用(24 个月内进行了 100 次更新),我建议按照以下顺序更新 EDMX。
删除现有模型然后更新:
- 打开 EDMX 设计器
- Ctrl-A 选择全部
- 删除键删除设计器中的所有模型
- 重要提示:如果您使用 TFS 进行源代码控制,此时请勿保存 EDMX!*
- 现在右键单击并选择“从数据库更新模型”以再次重新创建整个模型。
- 重建项目以传播更改
这显然会丢失您对模型所做的任何手动调整,但如果可能,应避免手动调整。这使得整个过程可以随时重现(这是一件好事)。
重要笔记:
- 如果您在 Visual Studio 中打开了自动保存功能,则需要快速选择更新(上面的步骤 5),以避免自动保存所有内容。
- 如果您使用 TFS 进行源代码控制,并且碰巧在清空 EDMX 后保存了它,TFS 会将所有生成的文件标记为“已删除”,并且再次更新 EDMX 可能会导致文件断开连接不在源代码管理中!.
- 此过程不会更新任何存储过程。此外,我发现刷新 EDMX 也不会更新仅返回类型已更改的存储过程(截至 EF 6.1.1 仍然是最新的)。
附加建议:
将您的 EDMX 保存在单独的库中。这也成为添加额外 TT 文件和部分类(例如扩展 EDMX 模型的功能)的好地方。我还将数据库上下文的任何扩展方法放置在这个库中。这migration
文件也会在库中生成,从而很好地包含所有内容。
2015 年 4 月更新
Visual Studio 2013 的最新版本 4 似乎已经解决了许多 TFS 问题。现在,我们看到 Visual Studio 检出生成的文件,如果它们未更改,则将其恢复。上述步骤似乎仍然是最安全的方法。
2015 年 9 月更新
使用最新的 VS2013 Release 5,如果在 EDMX 更新期间发生保存,我们仍然会遇到问题。您仍然可能会处于待定删除导致您的状态tt
文件成为从源代码管理中删除更新期间。秘诀是在第 4 步和第 5 步之间快速更新! :)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)