存储过程和更新EDMX


76

我在存储过程和EDMX方面遇到了无尽的问题。我创建了一个过程,从数据库更新了模型,并且一切正常。然后,我删除了一个列,并在存储过程中添加了一个新列。我更新了模型,但EDMX似乎没有刷新proc定义。

我删除了proc,并进行了更新,但手动必须删除对该proc的所有引用。我最终只是重命名proc并通过模型更新从数据库导入。

我只是有同样的问题。添加了新列,并重命名了现有列。我通过数据库中的更新模型刷新了EDMX,但是EDMX没有任何更改,显然在运行时,它失败了。如何使用Entity Framework更新存储过程?

在此处输入图片说明

我删除了proc,重新生成了模型,删除了proc的“ cs”文件,进行了编译,然后再次将过程添加到数据库中,重新生成了模型,然后砰!它将相同的模型添加3次,只有最后一个正确。为什么它会继续带回旧版本?

Answers:


186

(此解决方案适用于EF6。我没有在其他EF版本中尝试过。它很好用。)


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

  1. 第一名-在复杂类型下->作为MyStoreProc_result
  2. 第二名-在功能导入下->作为MyStoreProc
  3. 第三名-在存储的过程/函数下->作为MyStoreProc

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

解决没有任何麻烦:)


这非常有帮助,谢谢!我必须承认我有点不知所措,因为我在edmx图表中寻找该信息,并且那里没有显示存储过程-仅表和视图。
里奇·沃德

1
好的和精确的解决方案在EF 5中也很好用。
3条规则

7
当然可以,但是刷新完成后实际上不更新edmx的背后的想法是什么?这没有任何意义。
LarryBud

很棒,很有魅力!我还清除了对象的EDMX,并通过再次导入所有内容来重建它。
Mike Upjohn

1
很大的帮助,并且节省时间。在EF 6.1.3中,所有功能都像锐利的一样。谢谢
PatsonLeaner '18 / 10/15

44

要刷新edmx文件中的现有存储过程,

  1. 转到“模型浏览器”>“函数导入”>找到所需的存储过程类>右键单击并单击“编辑”
  2. 在“编辑函数导入”表单的“返回集合”部分中,单击“更新”按钮
  3. 单击“确定”完成刷新。

在此处输入图片说明


2
是的,我也用同样的方式(从我投票)。正如我之前评论的那样-Microsoft的家伙应该通过选择要更新的存储过程/函数来公开功能(类似于从数据库中添加/删除dbos。有“刷新”选项卡,这对IMO不太有用)
Miroslav Hristov

8

我能找到的唯一解决方法是关闭EDMX,并手动编辑XML,即使从数据库中删除了存储的proc,并从数据库中更新了模型后,仍然提到了proc。从XML删除行已解决了该问题。


5

按着这些次序:

步骤1:开启Edmx

在此处输入图片说明

步骤2:开启模型浏览器

在此处输入图片说明

第3步:打开复杂类型并删除您的 procedure_Result

在此处输入图片说明

步骤4:打开“函数导入”并删除您的 procedure

在此处输入图片说明

步骤5打开StoredProcedur和Functions并删除您的 procedure

在此处输入图片说明

第6步:保存Edmx(Ctrl+S), Clean Solution , Update Model From Database并选择您procedure要更新的内容,然后最终clean, build解决。做完了!


0

首先,请通过“从数据库更新模型”来刷新您的SP,如果它可以正常工作,如果没有,则抛出相同的异常,请按照以下步骤操作。1.双击.edmx文件。2.在模型浏览器中,从复杂类型,函数导入和存储过程/函数中删除SP。3.保存所有。4.通过“从数据库更新模型”再次添加您的SP。5.全部保存。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.