从EntityFramework调用存储过程时出错

Ing*_*rid 30 c# stored-procedures entity-framework azure

我试图从EntityFramework访问存储过程.

我已按照以下步骤操作:

首先,我在Azure数据库中创建了存储过程:

在此输入图像描述

然后,我从数据库更新了.edmx模型,只选择了我想要的StoredProcedure.

在此输入图像描述

完成后,在函数导入中,我看到已添加StoredProcedure,但未在StoredProcedures部分中添加.我能做什么才能出现在这里?

在此输入图像描述

在"函数导入"部分中,所有参数都设置为"输入",而"MaxReference"应标记为"输出".我该怎么改变它?

在此输入图像描述

虽然这两个问题我执行了代码:

在此输入图像描述

我得到以下例外:

EntityCommandCompilationException
An error occurred while preparing command definition. See the inner exception for details.
Run Code Online (Sandbox Code Playgroud)

和InnerException:

The function import 'DataModelEntities.AssignMaxSalesRef' cannot be executed because it is not assigned to a storage function.
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

Ale*_*lex 30

您可能想参考这篇博文:FunctionImport未映射到商店函数Error,它讨论了类似的问题.原因显然是:

我不得不对存储过程进行更改,并从实体数据模型Xml文件(*.edmx)中删除它

通过以下逐步解决方案:

有一个简单的解决方案来修复该错误.首先打开edmx文件,然后右键单击拥有存储过程的模型.单击添加,然后选择"添加功能导入".

添加在Context文件中使用的相同函数导入名称(如果像我一样,该方法已经创建但是搞砸了,否则全新,并且无论如何都会重新创建).选择您要修复的存储过程名称.选择实体,然后单击"确定".可能会弹出一个新窗口"验证FunctionImport名称是否唯一".

如果是这种情况,并且您弹出"验证FunctionImport名称是否唯一"窗口,请执行以下操作:打开*.edmx文件并右键单击要更新的模型.选择"在模型浏览器中显示".现在,模型浏览器窗口打开了.转至:{myProject} .DataModel> EntityContainer:{somethingEntities}>函数导入.导致问题的函数导入应该在那里,只需删除它并保存*.edmx文件.

尝试再次添加功能导入.瞧!这次没问题.保存*.edmx文件并重新创建上下文文件(通过简单的非侵入式更改,例如向{myProject} .Context.tt文件添加空格).确保新方法:

public virtual ObjectResult<MyEntity> <MyEntity>_NameoftheSP(parametets) 存在于您的上下文文件中.

另一个故障排除资源,在更新edmx文件时有类似的逐步说明(和图像!):无法执行函数导入,因为它未映射到存储函数.


MsT*_*app 26

这篇文章应该是一个评论,但我没有足够的代表评论.

我遇到了类似的问题.我的存储过程是可见的,但我仍然得到错误.Alex的这个问题和答案让我在模型浏览器中查看Function Imports,我看到每个存储过程都有多个条目.他们有序列号,以防止它们成为真正的重复.我删除了函数导入下的所有内容以及存储过程/函数下的所有内容,然后通过从数据库更新模型重新添加它们.我的问题现在已经解决了.

  • 这对我有用.我还必须删除模型浏览器中Complex Types文件夹下的p_procname_Result对象. (2认同)