使用 null 参数导入实体框架函数



我正在使用Visual Studio 2010在 ASP.NET 应用程序中首先实现实体框架数据库。在此数据库中,有许多存储过程,如下所示:

CREATE PROCEDURE [dbo].[PKG_EMPRESAS$BUSCAR] 
@PID_EMPRESA FLOAT(53) = NULL output
AS  
BEGIN  
    SELECT *  
      FROM EMPRESAS  
     WHERE ((@PID_EMPRESA IS NULL) OR (ID_EMPRESA = @PID_EMPRESA));  
END

每当我尝试在我的.VB代码:

Dim contexto As New ContextoGPI
Dim query = contexto.PKG_EMPRESAS_BUSCAR(Nothing)
query.GetEnumerator()

(也尝试使用 DBNULL。值(

在解扰时,我在ModeloGPI.edmx ModeloGPI.Designer.vb的这段代码中出现错误:

Public Function PKG_EMPRESAS_BUSCAR(pID_EMPRESA As ObjectParameter) As ObjectResult(Of EMPRESA)
   Return MyBase.ExecuteFunction(Of EMPRESA)("PKG_EMPRESAS_BUSCAR", pID_EMPRESA)
End Function

错误消息:

参数

数组中索引 0 处的参数为空

我找不到在我的模型中指定 de SP 的参数@PID_EMPRESA可为空的方法。

任何帮助将不胜感激。

我发现在SP定义中,可为空的参数PID_EMPRESAOUTPUT

发生这种情况时,实体框架将其设置为ObjectParameter而不是双精度,因为它返回一个值。

因此,在创建查询之前,只需创建一个带有Value = DBNULL.Value的对象参数

Dim contexto As New ContextoGPI
Dim PARAM As New System.Data.Objects.ObjectParameter("pID_EMPRESA", DBNull.Value)
Dim query = contexto.PKG_EMPRESAS_BUSCAR(PARAM)
Dim resultado As IEnumerable
resultado = query.AsEnumerable

这起到了作用:P

最新更新