2013-08-03 48 views
36

我对存储过程和EDMX有无穷无尽的问题。我创建了一个过程,从数据库更新了模型,并且都工作。然后我删除了一列,并在存储过程中添加了一个新列。我更新了模型,但EDMX似乎没有刷新proc定义。存储过程和更新EDMX

我放弃了proc,并做了更新,但是手动删除了对proc的所有引用。我结束了重命名proc,并通过数据库中的模型更新导入。

我刚刚有同样的问题。添加了一个新列,并重命名了一个现有列。我通过数据库的更新模型刷新了EDMX,但EDMX没有改变,显然在运行时它失败了。如何使用实体框架完成存储过程更新?

enter image description here

我删除了PROC,再生模式,删除了“CS”文件的PROC,编译,然后再添加程序到数据库,重新生成的模型,并砰!它增加了相同的模型3次,只有最后一个是正确的。它为什么不停地带回旧版本?

回答

7

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

89

(此解决方案是EF 6.我没有在其他EF版本的尝试。它的工作原理很好。)


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

  1. 第一地方 - 在复杂类型 - >如MyStoreProc_result
  2. 第二地方 - 在函数导入 - >如MyStoreProc
  3. 第三名 - 下储存 Procdures /功能 - >如MyStoreProc

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

解决没有任何麻烦:)

+0

你是一个拯救生命的人:D ...谢谢! – Muhammedh

+1

Thanks Muhammedh – SArifin

+0

这非常有帮助,谢谢!我必须承认,我有点不知所措,因为我一直在edmx图中查找这些内容,并且存储过程不显示在那里 - 只有表和视图。 –

1

首先通过做“从数据库更新模式”刷新SP,如果是工作,很好,如果不是,丢了同样的异常然后做遵循以下步骤。 1.双击.edmx文件。 2.在模型浏览器中,从复杂类型,函数导入和存储过程/函数中删除SP。 3.全部保存。 4.通过“从数据库更新模型”再次添加您的SP。 5.全部保存。