【问题标题】:Entity Framework Function Import with a Null Parameter带有 Null 参数的实体框架函数导入
【发布时间】:2014-12-17 19:29:30
【问题描述】:

我正在使用 Visual Studio 2010 在 ASP.NET 应用程序中实现 Entity Framework DB First。在这个数据库中,有许多这样的存储过程:

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.Value)

在调试时,我的ModeloGPI.edmxModeloGPI.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 可以为空的方法。

任何帮助将不胜感激。

【问题讨论】:

  • 如果你输入一个ObjectParameternull 怎么办?
  • 你是对的,我发现 SP 中的 OUTPUT 是导致这种情况发生的原因。谢谢!

标签: asp.net vb.net entity-framework


【解决方案1】:

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

当发生这种情况时,Entity Framework 将其设置为 ObjectParameter 而不是 Double,因为它返回一个值。

所以,在创建查询之前,只需创建一个带有 Value = DBNULL.Value 的 ObjectParameter

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-24
    • 2012-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多