刷新实体框架3.5中的存储过程

Jef*_*eff 54 stored-procedures entity-framework visual-studio-2008

我使用.NET 3.5 SP1,VS 2008与实体框架.我最初在我的模型中添加了一个存储过程,它带有2个参数.后来,我改变了sproc只需要1个参数.我运行了Update Model From Database菜单选项并确认我的sproc已列在Refresh选项卡中.完成向导,清理并重建解决方案,模型从未改变过sproc的签名.

为什么不更新?数据库功能的更新模型是否已损坏?我错过了什么吗?谢谢.

Dav*_*veD 134

在将存储过程添加到实体框架后,我已经看到了更新存储过程的两个问题:

  • 为调用SPROC而创建的函数导入未更新(不正确,过时的参数)
  • 为SPROC的结果集创建的复杂类型未更新(不正确的,过时的字段)

更新EDMX模型(功能导入)

  1. 打开.edmx文件(在GUI设计器中).
  2. 在某个开放空间中单击鼠标右键,然后选择"从数据库更新模型".
  3. 在弹出窗口中单击"完成"(如果可以).您的SPROC签名应该更新(以及任何功能导入).

更新存储过程的复杂类型

  1. 打开.edmx时打开" 模型浏览器 "窗口.

  2. 展开ContentModel,EntityContainer:...,然后展开Function Imports节点.查找存储过程的函数导入,然后双击它.您用于创建它的同一窗口将打开,但现在已填充其数据.

  3. 单击" 获取列信息"按钮(查看按钮下方的网格以查看将要更改的内容).

  4. 单击"复杂"单选按钮选项旁边的" 更新 "按钮.

  5. 单击" 确定",应更新结果集的"复杂类型".

  • 是我还是这是一个过于复杂和混淆的方法,似乎旨在加快应用程序创建?此外,这个问题仍然发生在EF6 =(另外,感谢这篇文章,我诅咒EF框架的时间最长,因为我每次更新时都删除并重新创建了我的edmx. (21认同)
  • 不,乔什,这不仅仅是你.它过于复杂,可能会浪费数小时试图让Entity Framework与存储过程一起工作.为什么EF需要使用存储过程?因为有时这是最好的解决方案.不要误会我的意思EF很好但是肯定存储过程应该像桌子一样容易找到,而不是像老人一样羞愧地隐藏起来. (9认同)
  • 谢谢!!在我的情况下,我从功能导入列表中右键单击(并选择更新)存储过程 - 不是双击!只是注意到你可以右键单击然后选择编辑! (2认同)

小智 13

您不必编辑edmx/xml.做这个:

当你将一个存储过程带入EDMX时(我说的是一个返回结果集,但它将是一个类似的过程),3,而不是1,创建项目,这就是问题的根源.(***问题的第二个原因是在重新导入对象之前必须在删除对象后明确保存,否则新重新导入的对象将与edmx中未真正删除的内容(通过保存)冲突.

所以!做这个:

在模型浏览器中,通常在左侧,将存储过程的名称粘贴到搜索框中,单击"输入"(或搜索).它将落在第一个实例上 - 可能是存储过程本身.右键单击并删除.现在,将光标放回搜索框 - >点击输入或再次搜索.现在您将登陆功能导入.右键单击并删除.第三次做同样的事情 - 这将落在代表结果集的复杂类型上.删除它.现在你已经完成了!!!!! 您必须保存刚刚执行的操作,以便在edmx中写入(未写入)删除.

现在,再次获取存储过程(更新模型/选择存储过程).现在点击再次保存.

这将每次都有效.关键是确保在使用模型浏览器搜索模型浏览器中出现的存储过程名称的所有实例时,因此,最好不要使用默认命名约定.第二个关键是在完成任何步骤后保存.


小智 6

如果你需要更改结果集中列的数据类型 - >在stor proc的开头添加 set fmtonly off

然后使用模型浏览器 - >功能导入 - >编辑您的过程 - >获取列信息按钮 - >更新按钮

尼尔这是怎么做的:)

  • 这个尼尔是谁? (2认同)