.net的ef框架更新tidb6.5.3数据库实体模型报错(4.0.15版本没有问题)

它的抽象逻辑其实是这样的:
select * from (
select 1 C5 from INFORMATION_SCHEMA.COLUMNS where table_schema=‘test’
union all
select 6 C5 from INFORMATION_SCHEMA.COLUMNS where table_schema=‘test’
) t where t.C5 =1 ;

由于6.5.3无法把C5=6的值给过滤掉,所以6.5.3比4.0.15的执行结果要多出一倍的数据。
因此原始sql执行后,在6.5.3会出现重复的字段,从而ef框架报出重复字段的错误’‘’

这部分没看懂,如果test下有个表id 和name列,这个语句查询结果应该是返回2个1,还要过滤什么吗?

1 个赞

在4.0.15执行结果是返回两个1,但是在6.5.3返回结果是两个1和两个6。
即,6.5.3没有把6这个结果给过滤掉,返回结果是不正确的。

where t.C5 =1不可能过滤不掉的

这样看的话确实有问题,理论上查出来的结果要一样,建议去github上提issue问一问

1 个赞

实际上6.5.3版本就是过滤不掉 :sob:
不光是INFORMATION_SCHEMA.COLUMNS表,其他system view表也有很多过滤不掉。

1 个赞


我 playground 跑了下,也是为空诶。。。

需要有test库、并且test库下面有表。

或者直接执行这个语句:
select * from
(select 6 id from INFORMATION_SCHEMA.COLUMNS) t
where t.id =1 ;

我在3个6.5.3的环境里执行,结果都不是null,而是一堆6