所以我在SQL Server中有一个数据库,我正在连接并使用Entity Framework 4.1来生成我的POCO类,这通常很有效。还有一些存储过程,我使用“函数导入”功能来创建检索调用它们的结果数据行。基本上我正在使用的过程是:
这将为结果集定义创建一个POCO类,我可以执行以下操作:
var query = context.GetMyStuff().AsQueryable();
检索结果。这似乎工作得很好。
现在我遇到的麻烦是当我尝试修改存储过程然后将更改传播到我的代码时。例如,我向表中添加了一个附加列,然后更新了存储过程以将该列数据作为结果的一部分返回。我没有看到如何使更新传播到函数导入的东西,即,使生成的POCO具有该添加列的新属性。
对程序进行更新的练习反映在C#方面?我每次都要上新课吗?对我来说,如何做到这一点并不明显。
其他信息:
当我尝试“更新”复杂类型时,正如Ladislav对this question的回复中所建议的那样,我收到一条错误消息“验证FunctionImport名称是唯一的。”
如果我尝试一下E.J. Brennan建议如下,我得到相同的错误信息。
的工作原理,至少在我看来,是在Notepad ++中打开Model.edmx文件,找到FunctionImport行并删除它然后重新生成它。这不是理想的,但它确实奏效了。
答案 0 :(得分:26)
(这个解决方案适用于EF 6.我没有在其他EF版本中尝试过。它运行得很好。)我支持Brennan的答案,通过举例说明让像我这样天真的编码员更清楚:)
转到模型浏览器。 MyStoreProc是存储过程的名称(作为示例)。 MyStoreProc将出现在3个地方。
答案 1 :(得分:9)
我通常会进入模型浏览器,在主菜单中选择View>其他Windows>实体数据模型浏览器(它通常在与解决方案资源管理器相同的面板中打开),并删除已更改的存储过程,然后重新添加。
可能会更容易,但这个适合我。
编辑:“从数据库更新模型”理论上也应该有效,但根据我的经验,它在100%的时间内不起作用,删除和重新添加似乎坚如磐石。
答案 2 :(得分:2)
在我们公司,我们过去更新SP就像SArifin的答案......虽然有效,但却有点拖累。
最近我们发现你只需要去SP功能导入 - >右键单击 - >编辑 - >更新复杂类型。
答案 3 :(得分:1)
@itsmatt - 您的解决方案适合我。简而言之,
<FunctionImport Name="<some name>" ReturnType="Collection(dev_riskModel.GetECLExcesses_Result)"> (additional lines. . .) </FunctionImport>
答案 4 :(得分:1)
我刚刚遇到同样的问题,谢谢你的回答!我还要做的另一件事是删除模型浏览器中“复杂类型”的输出。