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语句导致了相应的报错。

时间: 2024-11-05 13:27:43

EntityFramework.Extended.Update.Ambiguous column name的相关文章

entity framework 新手入门篇(4)-entity framework扩展之 entityframework.extended

对于EF的操作,我们已经有了大概的了解了,但对于实战来说,似乎还欠缺着一些常用的功能,那就是批量的删除,更新数据. 承接上面的部分,我们有一个叫做House的数据库,其中包含house表和seller表. 一.使用原生EF如何实现批量删除和修改? //批量修改 public static bool UpdateAllPrice(decimal price) { bool isOk = false; using (HouseEntities db = new HouseEntities()) {

EntityFramework和EntityFramework.Extended使用说明——性能,语法和产生的sql

环境说明:EntityFramework 6.1.3和.Net Framework4.5性能注意事项:https://msdn.microsoft.com/zh-cn/library/cc853327.aspx比较精髓的一点:查询执行的各个阶段中的准备查询,每个唯一查询一次.包括编写查询命令.基于模型和映射元数据生成命令树和定义所返回数据的形状的成本. 因为实体 SQL查询命令和 LINQ 查询现已缓存,所以,以后执行相同查询所需的时间较少. 如果有缓存的话,那么查询命令转成sql语句的性能会进

采用EntityFramework.Extended 对EF进行扩展(Entity Framework 延伸系列2)

前言 Entity Framework 延伸系列目录 今天我们来讲讲EntityFramework.Extended 首先科普一下这个EntityFramework.Extended是什么,如下: 这是一个对Entity Framework进行扩展的类库. 完全支持EF 5.0/6.0+, GitHub地址 https://github.com/loresoft/EntityFramework.Extended, 最后一次更新是在2015/07/10 这个库支持批量更新,删除.查询结果缓存和审计

Mysql 该如何 Entity Framework 数据库迁移 和 如何更好的支持EntityFramework.Extended

问题 1.在使用EntityFramework访问Mysql的时候,使用迁移来生成数据库或者更新数据库时候会遇到一些问题 2.EntityFramework.Extended对Mysql的支持不是很完全,其中修改是无法直接使用的需要做一些处理 解决方案 1.首先解决第一个问题 准备条件:用Nuget下载Mysql.Data.Entity(可以将依赖连同下载) 我们采用Code First的形式来建立了实体.然后新建自己的DbContext类. 这个直接使用命令 Enable-Migrations

EntityFramework 插件之EntityFramework.Extended (批量处理)

接手了一个用EF来做的项目,由于项目中使用的原生处理,导致很多update都是采用先select 后 update的方式来实现,同时无法批量执行逻辑如:根据订单类型统一更新状态等.所以在经过了N多查找之后 发现了一个国外写的扩展插件EntityFramework.Extended . Github:https://github.com/loresoft/EntityFramework.Extended 简单说一下用法: Deleting //delete all users where Firs

如何使用Entityframework.Extended

这个插件真的很实用,我们可以使用以下语法来简化我们的工作,以下仅仅是示例: Deleting <strong>//delete all users where FirstName matches context.Users.Delete(u => u.FirstName == "firstname"); </strong> Update //update all tasks with status of 1 to status of 2 context.T

怎样使用Entityframework.Extended

这个插件真的非常有用,我们能够使用下面语法来简化我们的工作,下面不过演示样例: Deleting <strong>//delete all users where FirstName matches context.Users.Delete(u => u.FirstName == "firstname"); </strong> Update //update all tasks with status of 1 to status of 2 context

entityframework.extended安装

在开始学习EF过程中,发现EF的批量更新和批量删除比较缓慢,在网上搜索到entityframework.extended 插件很好的解决了这个问题,故此想下载安装学习一下,下面是自己再安装过程中遇到的问题以及解决方法. 一.entityframework.extended 安装步骤: 出现错误提示如下: 二.解决问题方法 1.找到DNS服务器地址 再网上经过一番查找好,这篇博客给予了我启发http://blog.csdn.net/bklydxz/article/details/50967498,

关于 Ambiguous column name ‘数据库某列’

在SQL语句中,如果使用联合检索的话,很有可能会出现ambiguous column name的错误. 但是在调用对应SQL的后台也会报出这样的错误: 例如: select A.ID,B.NAME,SCORE from A,B where A.BH = B.N_BH 如果A和B表中都有SCORE字段,这时就会出现ambiguous column name 'SCORE' 这个错误 只需要找到对应SQL的字段,指明是哪个表的即可 select A.ID,B.NAME,   B.SCORE