对sql到对象映射实体框架进行故障排除

时间:2020-07-10 21:28:15

标签: c# sql-server entity-framework linq-to-sql

我的问题是:

如何调试从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行),其中包含许多通用列,例如C1C2等。它确实返回的命名列的列顺序似乎在按字母顺序排序,等等...所以我将所有类属性按字母顺序排序,以查看它们是否符合列顺序...可以这样做,但不是100%...加上该类是从另一个继承的。。。不确定是在alpha排序中还是在末尾等。

无论如何,那是我试图找出问题所在。该查询确实有几个为空的字段,但是有很多字段,还有很多字符串和可为null的int等,因此这些字段可能是有效的。甚至试图弄清C1列是否返回null,对于这个非常大的查询以及具有80多个字段的类,几乎都无法尝试映射到该实际属性。

反正有没有将sql分解为对象映射以确切地知道问题出在哪个属性上?

1 个答案:

答案 0 :(得分:1)

我认为您的问题可能是这样的。

您的数据库模型: param: Intersection[Foo, Bar]

您可能已经知道,int是一个结构,并且其值不能为null。 在mapper序列化数据的地方,它会抛出一个异常,因为数据库中的该列可能为空。

您可以做的一件事是使int可为空,例如: public int property { get; set; }

也许您可以使用SQL Server中的SQL Profiler进行检查。