我正在使用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_EMPRESA
是OUTPUT
发生这种情况时,实体框架将其设置为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