我们正在使用Entity Framework 6.0.0并首先使用数据库(like this)从表和存储过程生成代码。这似乎很有效,只是更新或刷新模型时不会反射(reflect)存储过程中的更改。向表添加列会得到反射(reflect),但不会向存储过程添加字段。
有趣的是,如果我转到模型浏览器
,右键单击存储过程,选择添加函数导入
,然后单击按钮获取列信息
我们可以看到正确的列。这意味着模型知道这些列,但无法更新生成的代码。
有一种解决方法,那就是在更新模型之前删除生成的存储过程。只要您没有对存储过程进行任何编辑,此操作就有效。有谁知道避免这种解决方法的方法吗?
我使用的是 Visual Studio 2013
,其中包含截至 2013 年 12 月初的所有最新更新。
提前致谢!
更新 1: andersr的回答在一种情况下有所帮助,其中存储过程使用了临时表,所以我给了他+1,但它仍然没有解决更新简单存储过程的主要问题。
更新 2: shimron 下面的评论链接到有关 EF 3.5 中相同问题的问题。 EF 6.0 似乎仍然如此。阅读它以获取替代方法,但我目前的结论是,最简单的方法是在更新模型之前删除生成的存储过程。如果您想做一些奇特的事情,请使用部分类。
请您参考如下方法:
基于this answer通过 DaveD ,这些步骤解决了该问题:
- 在
.edmx
中,按住 rt 键单击并选择模型浏览器。 - 在模型浏览器(在 VS 2015 默认配置中,它是解决方案资源管理器中的一个选项卡)中,展开模型下的函数导入。
- 双击您的存储过程。
- 点击返回复杂集合旁边的更新按钮(如果不返回标量或实体)
- 点击确定,然后保存您的 .edmx,以反射(reflect)整个项目中存储过程的字段更改。