反映对Entity Framework生成的复杂类型中的存储过程所做的更改

its*_*att 9 entity-framework entity-framework-4.1

所以我在SQL Server中有一个数据库,我正在连接并使用Entity Framework 4.1生成我的POCO类,这通常很好用.还有一些存储过程,我使用"函数导入"功能来创建检索调用它们的结果数据行.基本上我正在使用的过程是:

  1. 右键单击Model.edmx并选择"Function Import ..."
  2. 从下拉列表中选择程序
  3. 输入我想要的功能导入名称
  4. 点击"获取列信息"
  5. 点击"创建新的复杂类型"
  6. 点击"确定"

这将为结果集定义创建一个POCO类,我可以这样做:

var query = context.GetMyStuff().AsQueryable();

检索结果.这似乎工作得很好.

现在我遇到的麻烦是当我尝试修改存储过程然后将更改传播到我的代码时.例如,我向表中添加了一个附加列,然后更新了存储过程以将该列数据作为结果的一部分返回.我没有看到如何使更新传播到函数导入的东西,即,让生成的POCO为该添加的列具有新属性.

对程序进行更新的练习反映在C#方面?我每次都要上新课吗?对我而言,如何做到这一点并不明显.


附加信息:

当我尝试"更新"复杂类型时,正如Ladislav 对此问题的回复中所建议的那样,我收到一条错误消息"验证FunctionImport名称是否唯一".

如果我尝试EJ Brennan在下面建议的内容,我会收到相同的错误消息.

什么工作,至少对我来说,在记事本++打开Model.edmx文件,找到FunctionImport线,并删除它,然后重新生成.这不是理想的,但它确实奏效了.

SAr*_*fin 26

(这个解决方案适用于EF 6.我没有尝试过其他EF版本.它运行得很好.)我支持Brennan的答案,通过举例说明让像我这样的天真编码器更清楚:)


转到模型浏览器.MyStoreProc是存储过程的名称(作为示例).MyStoreProc将出现在3个地方.

  1. 第一名 - 在复杂类型下 - >作为MyStoreProc_result
  2. 第二名 - 在功能导入下 - >作为MyStoreProc
  3. 第三名 - 在存储的程序/功能下 - >作为MyStoreProc 在此输入图像描述

从模型中删除所有三个.保存edmx(通过单击窗口然后按Ctrl + S).然后右键单击并单击从数据库更新模型.然后添加更新的存储过程并再次保存.

解决没有任何麻烦:)


E.J*_*nan 9

我通常进入模型浏览器,在主菜单中选择View> Other Windows> Entity Data Model Browser(它通常在与Solution explorer相同的面板中打开),然后删除已更改的存储过程,并重新添加回来.

可能会更容易,但这个适合我.

编辑:"从数据库更新模型"理论上也应该有效,但根据我的经验,它在100%的时间内不起作用,删除和重新添加似乎坚如磐石.