存储过程和更新EDMX

时间:2013-08-03 23:47:33

标签: c# entity-framework

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

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

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

enter image description here

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

6 个答案:

答案 0 :(得分:131)

(此解决方案适用于EF 6.我没有在其他EF版本中尝试过。它运行良好。)

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

  1. 第一名 - 复杂类型 - >作为MyStoreProc_result
  2. 第二名 - 功能导入 - >作为MyStoreProc
  3. 第三名 - 在存储下 程序/功能 - >作为MyStoreProc
  4. 从模型中删除所有三个。 保存edmx(通过单击窗口然后按Ctrl + S)。然后右键单击并单击从数据库更新模型。然后添加更新的存储过程并再次保存。

    解决没有任何麻烦:)

答案 1 :(得分:16)

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

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

答案 2 :(得分:7)

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

请按照以下步骤操作:

第1步:打开Edmx

enter image description here

第2步:打开模型浏览器

enter image description here

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

enter image description here

第4步:打开函数导入并删除您的procedure

enter image description here

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

enter image description here

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

答案 5 :(得分:0)

(在 Visual Studio Community 2019 v16.8.5 中针对 EF6 进行测试)

转到模型浏览器并浏览到您的程序。以下两个地方之一:

  1. 模型 > 函数导入 > myProcedure
  2. Store > 存储过程/函数 > myProcedure

(如果您仍然不确定如何浏览到您的程序,请按照 Ishwor Khanal 帖子中的插图/图片进行操作。)

右键单击您的程序,从上下文菜单中选择“从数据库更新模型...”。
Context Menu

点击“刷新”标签

enter image description here

打开“存储过程和函数”,然后打开“dbo”。

选择要更新的存储过程,然后单击“完成”。 enter image description here

完成! (比删除然后再次导入更麻烦;-) )