【问题标题】:Entity Framework 4.0 Entity SQL passing null ObjectParameter parametersEntity Framework 4.0 Entity SQL 传递空 ObjectParameter 参数
【发布时间】:2011-01-27 10:44:37
【问题描述】:

我有一个实体 SQL 查询:

SELECT VALUE t FROM MyEntities AS t 
WHERE t.Name = @p OR (@p IS NULL AND t.Name IS NULL)

我可以按如下方式执行查询:

var results = context.CreateQuery<WorkflowInstance>(
    query, new ObjectParameter("p", name)).ToList();

但是,如果“名称”变量为空,则会收到 System.ArgumentNullException。因此,如果名称为空,我也尝试使用 DBNull.Value,但出现以下异常:

System.ArgumentOutOfRangeException 被捕获
Message=指定的 参数类型“System.DBNull”不是 有效的。只有标量类型,例如 System.Int32, System.Decimal, System.DateTime 和 System.Guid 是 支持。

我想要参数化查询,其中空值也是可能的参数值。如何使用 Entity SQL 实现这一点?

【问题讨论】:

    标签: .net entity-framework .net-4.0 entity-framework-4 entity-sql


    【解决方案1】:

    你是对的,似乎是 ObjectParameter 构造函数中的一个错误。 但是 Value 属性似乎接受空值。 尝试将您的代码替换为:

    var prm = new ObjectParameter("p", typeof(string));
    prm.Value = name;
    
    var results = context.CreateQuery<WorkflowInstance>(
        query, prm).ToList();
    

    如果您直接分配 Value 参数,代码似乎可以工作。

    大卫

    【讨论】:

      【解决方案2】:

      Davide 的帖子不错,我使用此修复程序传递了一个整数值;

      var prm = new ObjectParameter("pName", typeof(int));
      prm.Value = pmId;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多