我正在使用.NET 3.5 SP1,VS 2008和实体框架。我最初在我的模型中添加了一个存储过程,它带有2个参数。后来,我改变了sproc只需要1个参数。我运行了Update Model From Database
菜单选项并确认我的sproc已列在Refresh
标签中。完成向导,清理并重建解决方案,模型从未改变过sproc的签名。
为什么不更新?数据库功能的更新模型是否已损坏?我错过了什么吗?感谢。
答案 0 :(得分:134)
在将存储过程添加到实体框架后,我看到了更新存储过程的两个问题:
更新EDMX模型(功能导入)
更新存储过程复杂类型
打开.edmx时打开“模型浏览器”窗口。
展开 ContentModel , EntityContainer:... ,然后功能导入节点。查找存储过程的函数导入,然后双击。您用于创建它的同一窗口将打开,但现在已填充其数据。
点击获取列信息按钮(查看按钮下方的网格以查看将要更改的内容)。
点击“复杂”单选按钮选项旁边的更新按钮。
点击确定,结果集的复杂类型应该更新。
答案 1 :(得分:6)
如果您需要更改结果集中列的数据类型 - >在stor proc开头添加 关闭fmtonly
然后使用 模型浏览器 - >功能导入 - >编辑你的过程 - >获取列信息按钮 - >更新按钮
尼尔是这样做的:)
答案 2 :(得分:1)
在XML上进行了大量的手动编辑,并重新启动了Visual Studio,但我终于能够让VS忘记之前的签名了。然后,我只是使用普通的EF向导将其重新添加,并且工作正常。
答案 3 :(得分:1)
如果更改存储过程的签名,则需要通过函数import更新模型中创建的任何复杂类型。
答案 4 :(得分:0)
您必须删除并添加存储过程,因为实体框架需要为您的过程生成新定义。我想你需要重做函数导入。
基本上,如果您更改了过程的逻辑而不是返回类型或签名,则无需再次添加它。它可以正常工作,但如果你改变了返回类型或签名,需要生成并将其映射到一个新的定义,就像它的工作方式一样。
答案 5 :(得分:0)
在EF4中存在类似的问题,其中没有刷新单个sps的选项,当你在更新向导中点击刷新但它无法可靠地工作时,它就是这样做的。我不得不在模型浏览器中删除返回值的复杂类型,以及函数import。然后使用XML编辑器进入edmx文件并删除对存储过程的引用(在模型浏览器中找不到这样做的方法)。然后重新添加sps。
答案 6 :(得分:0)
您还可以在以下位置删除SP的所有证据,当您打开.edmx文件时,可以在模型浏览器中找到这些文件:
删除后,您可以将其添加回来,没有任何问题。