我的问题是:
如何调试从SQL Server返回的记录中的 映射过程 ,因为该记录已映射到类对象,因此我可以准确地知道哪个类属性是失败了吗?
背景:
从SQL Server返回数据时出错,因为它试图将sql数据映射到对象。我正在使用Entity Framework 6和Automapper投影来了解它的价值。
我得到的错误是The cast to value type 'System.Int32' failed because the materialized value is null. Either the result type's generic parameter or the query must use a nullable type.
。
我知道这意味着SQL中的一列正在返回NULL,它试图映射到int
中不可空的类属性 。但是,如何分辨哪个属性是问题?
EF创建的查询非常庞大(1,250行),其中包含许多通用列,例如C1
,C2
等。它确实返回的命名列的列顺序似乎在按字母顺序排序,等等...所以我将所有类属性按字母顺序排序,以查看它们是否符合列顺序...可以这样做,但不是100%...加上该类是从另一个继承的。。。不确定是在alpha排序中还是在末尾等。
无论如何,那是我试图找出问题所在。该查询确实有几个为空的字段,但是有很多字段,还有很多字符串和可为null的int等,因此这些字段可能是有效的。甚至试图弄清C1
列是否返回null,对于这个非常大的查询以及具有80多个字段的类,几乎都无法尝试映射到该实际属性。
反正有没有将sql分解为对象映射以确切地知道问题出在哪个属性上?
答案 0 :(得分:1)
我认为您的问题可能是这样的。
您的数据库模型:
param: Intersection[Foo, Bar]
您可能已经知道,int是一个结构,并且其值不能为null。 在mapper序列化数据的地方,它会抛出一个异常,因为数据库中的该列可能为空。
您可以做的一件事是使int可为空,例如:
public int property { get; set; }
也许您可以使用SQL Server中的SQL Profiler进行检查。