zoukankan      html  css  js  c++  java
  • EntityFramework.Extended.Update.Ambiguous column name

    异常描述

      c#代码 dbcontext.Table.Where(x => x.B > 0).Update( x => new Table() { A = x.B } )  抛出异常:Ambiguous column name 'B'

    测试环境

      .net4.5 + EF6.0 + SQLServer2008

    测试模型

      

    测试1

    try
    {
        using (var container = new TestModelContainer())
        {
            var date = new DateTime(2017, 6, 2);
    
            container.TestEntity.Where(l => l.Date2 > date).Update(d => new TestEntity() { Date1 = d.Date2 });
    
            Console.WriteLine("Done!");
        }
    }
    catch (AggregateException err)
    {
        Console.WriteLine("Error! " + err.InnerException.Message);    
    }

    测试目的:结合Where和Update,datetime类型的表变量相互赋值,是否能通过

    测试结果:

    测试2

    container.TestEntity.Where(l => l.Int2 == 2).Update(d => new TestEntity() { Int1 = d.Int2 });
    container.TestEntity.Where(l => l.Int2 > 1).Update(d => new TestEntity() { Int1 = d.Int2 });

    测试目的:结合Where和Update,int类型的表变量相互赋值,是否能通过

    测试结果:

    测试3

    container.TestEntity.Where(l => l.Bool2 == false).Update(d => new TestEntity() { Bool1 = d.Bool2 });

    测试目的:结合Where和Update,bit类型的表变量相互赋值,是否能通过

    测试结果:

    测试4

    container.TestEntity.Where(l => l.Int2 == 2).Update(d => new TestEntity() { Int1 = 0 });

    测试目的:结合Where和Update,int类型赋值为常量,是否能通过

    测试结果:

    测试5

    container.TestEntity.Where(l => l.Bool2 == false).Update(d => new TestEntity() { Int1 = d.Int2 });

    测试目的:Where语句中未出现赋值相关变量,int类型的表变量相互赋值,是否能通过

    测试结果:

    测试结论

    1. 用常量赋值的情况一切正常。(测试4)

    2. 用变量赋值的情况时,如果查询过滤条件中没有赋值变量的相关判断语句,执行正常。(测试5)

    3. 用变量赋值的情况时,如果查询过滤条件中有赋值变量的相关判断语句,且对应变量类型为int时,会提示列名不明确(Ambiguous column name),(测试2)。

    相同前提下,datetime和bit类型执行正常。(测试1|3)

    4. 还有其他的数据库类型待测试,且待测可空数据类型。

    附上测试1、2两种情况时,跟踪到的相关sql语句

    测试1的sql语句

     

    测试2的sql语句

    结合以上sql语句,不难看出,ef.extended生成的异常sql语句导致了相应的报错。

  • 相关阅读:
    SQL2012远程连接到SQL2008时的问题:已成功与服务器建立连接,但在登陆过程中发生错误。
    常用正则表达式
    ASP.NET不拖控件教程(1)-认识JSON
    ASP.NET服务器控件对应的HTML标签
    Apache Ranger 1.1.0源码导入IDEA并运行调试security-admin web模块
    【JDK源码分析】线程池ThreadPoolExecutor原理解析
    【JDK源码分析】同步工具Exchanger,它的内部实现原理你看懂了吗?
    【JDK源码分析】并发包同步工具Semaphore
    【JDK源码分析】并发包同步工具CountDownLatch
    【JDK源码分析】并发包同步工具CyclicBarrier
  • 原文地址:https://www.cnblogs.com/icyJ/p/Update_Ambiguous_column.html
Copyright © 2011-2022 走看看