首页 文章

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

提问于
浏览
52

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

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

8 回答

  • 0

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

    • 为调用SPROC而创建的函数导入未更新(不正确,过时的参数)

    • 为SPROC 's result set wasn' t创建的复杂类型已更新(错误的,过时的字段)

    Updating EDMX model (function import)

    • 打开.edmx文件(在GUI设计器中) .

    • 在某个空白区域中单击鼠标右键,然后选择"Update Model from Database" .

    • 在弹出窗口中单击“完成(如果可以)” . 应更新您的SPROC签名(以及任何功能导入) .

    Updating stored procedure complex type

    • 打开.edmx时打开“ Model Browser ”窗口 .

    • 展开 ContentModelEntityContainer: ... ,然后展开 Function Imports 节点 . 查找存储过程的函数import和 double click 它 . 您用于创建它的同一窗口将打开,但现在已填充其数据 .

    • 单击 Get Column Information 按钮(查看按钮下方的网格以查看将要更改的内容) .

    • 单击"Complex"单选按钮选项旁边的 Update 按钮 .

    • 单击 OK ,应更新结果集的复杂类型 .

  • 0

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

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

    所以!做这个:

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

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

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

  • 0

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

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

    尼尔这是怎么做的:)

  • 132

    在XML上进行了大量的手动编辑并重新启动了Visual Studio,但我终于能够让VS忘记之前的签名了 . 然后我只是使用普通的EF向导将其添加回来并且它工作得很好 .

  • 6

    如果更改存储过程的签名,则需要通过函数导入更新模型中创建的任何复杂类型 .

  • 13

    您必须删除并添加存储过程,因为实体框架需要为您的过程生成新定义 . 我想你需要重做函数导入 .

    基本上,如果您更改了过程的逻辑而不是返回类型或签名,则不需要再次添加它 . 它可以正常工作,但如果你改变返回类型或签名ef需要生成并将其映射到一个新的定义,这是它的工作方式 .

  • 1

    在EF4中存在类似的问题,其中没有刷新单个sps的选项,当您在更新向导中单击刷新但它无法可靠地工作时,它就是这样做的 . 我不得不在模型浏览器中删除返回值的复杂类型,以及函数import . 然后使用XML编辑器进入edmx文件并删除对存储过程的引用(在模型浏览器中找不到这样做的方法) . 然后重新添加sps .

  • 1

    您还可以在以下位置删除SP的所有证据,当您打开.edmx文件时,可以在模型浏览器中找到这些文件:

    • YourModel>复杂类型;

    • YourModel>功能进口;

    • YourModel.Store>存储过程/函数 .

    删除后,您可以将其添加回来,没有任何问题 .

相关问题