【问题标题】:IBM ERROR SQL0417N with EF6带有 EF6 的 IBM 错误 SQL0417N
【发布时间】:2015-10-29 20:51:22
【问题描述】:

使用 EntityFramework.IBM.DB2 (6.0.0) 和:

http://www.microsoft.com/en-us/download/details.aspx?id=40762

http://www-01.ibm.com/support/docview.wss?uid=swg24038828

我创建了一个简单的单元测试。

using (var ctx = new ClaimHighLightsContext())   
   {           
    var c = "some valid string";           
     var result = ctx.ClaimTab.FirstOrDefault(x => x.CLM_CSR_CLAIM_NBR == c);          
     Assert.IsNotNull(result);     
   }

抛出此错误:

System.Data.Entity.Core.EntityCommandExecutionException:执行命令定义时出错。有关详细信息,请参阅内部异常。 ---> IBM.Data.DB2.DB2Exception:

错误 [42609] [IBM][DB2] SQL0417N 要准备的语句字符串 包含参数标记作为同一运算符的操作数。

但如果我写这个,我会得到预期的结果

using (var ctx = new ClaimHighLightsContext())
           {              
            var result = ctx.ClaimTab.FirstOrDefault(x => x.CLM_CSR_CLAIM_NBR == "some valid string");               
            Assert.IsNotNull(result);
           }

我正在使用这个包:

<package id="EntityFramework" version="6.0.0" targetFramework="net45" /> 
<package id="EntityFramework.IBM.DB2" version="6.0.0" targetFramework="net45" />

请帮忙

【问题讨论】:

  • 该错误意味着FirstOrDefault() 调用转换为包含无类型参数标记(如...WHERE ? = ?)的SQL 查询,因此DB2 无法确定在该比较中使用的数据类型。我没有使用 Linq 的经验,但我怀疑 ClaimTab 的表到实体映射不正确或 CLM_CSR_CLAIM_NBR 不是字符串。
  • 相同的实体映射正在使用我刚刚更新到 Ef6 的 Entity Framework 5

标签: linq db2 entity-framework-6


【解决方案1】:

@juancarlos 这可以通过在 DbContext 类中设置 Configuration.UseDatabaseNullSemantics = true 来解决。

如果您需要更多信息,可以查看以下关于 codeplex 的讨论以及设置的 MSDN 文档。

https://entityframework.codeplex.com/workitem/2115

https://msdn.microsoft.com/en-us/library/system.data.entity.infrastructure.dbcontextconfiguration.usedatabasenullsemantics(v=vs.113).aspx

【讨论】:

    猜你喜欢
    • 2013-11-13
    • 1970-01-01
    • 1970-01-01
    • 2014-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-30
    相关资源
    最近更新 更多