Closed Sheldon-NULL closed 11 months ago
Chloe.Exceptions.ChloeException:“Please make sure that the member of the column 'MaxCount'(13,INT,System.Int32) map is nullable.” SqlNullValueException: Data is Null. This method or property cannot be called on Null values.
嗯,是的,目前SqlQuery的逻辑是只要数据库返回的字段有和csharp类属性对上的都会尝试赋值。 之所以这样设计,是因为sql是开发人员自主可控的(不需要的字段查询不要将对应的字段放在select里),所以就忽略[NotMapped]特性。
不,问题不是这样的,或者说你解释的理由说不通的。这是一个BUG。[NotMapped]特性的字段,怎么会在SQL中返回呢?数据库里面根本没有这个字段。
将sql和类贴来看看。
SQL:
DROP TEMPORARY TABLE IF EXISTS tempTable;CREATE TEMPORARY TABLE IF NOT EXISTS tempTable AS SELECT FROM substation.volunteer_act act WHERE act.RegiEndTime > '2023-11-25 17:23:53' AND act.RegiStartTime <= '2023-11-25 17:23:53' ORDER BY act.SortId DESC,act.Id DESC;INSERT INTO tempTable SELECT FROM substation.volunteer_act act WHERE act.RegiStartTime > '2023-11-25 17:23:53'ORDER BY act.SortId DESC,act.Id DESC;INSERT INTO tempTable SELECT FROM substation.volunteer_act act WHERE act.RegiEndTime < '2023-11-25 17:23:53'ORDER BY act.SortId DESC,act.Id DESC;SELECT FROM tempTable where Status
> 0 and AuditStatus =3 limit 0,10 ;DROP TEMPORARY TABLE IF EXISTS tempTable;
类在附件 新建文本文档.txt
一开始我以为是SELECT *的问题,后面写了一个用.NET 6的Demo尝试去用简单User表去复现问题的,但遗憾没有复现出来。(发现这个BUG的环境.NET CORE2.2 MySQL8.026)
看不出什么原因~·我这也没重现。- -
有没有把我这个类的?删掉再试的,这里面是我加了?让他可空才跑过去的
不知道你的表结构是啥样~ 你确定sql语句返回的datareader里没包含 MaxCount吗?出现这个异常,很大可能是查询返回的DataReader里有maxcount这个字段。
好吧,我刚刚去翻了一下表结构,确实是有这个字段的~ 这个问题是个误会! 不得不吐槽一句,至今也没想明白,上一任的开发,为啥表里面有的字段,要给NotMapper,而且需要的时候,也是实时通过另外的表查出来再计算的,非常的不理解。
版本:
问题代码: list = context.SqlQuery(listSql.ToString());
会把有[NotMapped]特性的属性也尝试赋值填上去,然后由于那个属性不是可为空的,就报错了。