Dapper在某些情况下抛出错误的“splitOn”错误消息似乎存在问题。我遇到了一个没有使用Dapper多映射的查询,但却抛出了这个错误。在调试期间,似乎GetTypeDeserializer()在查询上运行,如果它检测到返回数据中没有字段,则会错误地抛出此错误。
if (reader.FieldCount <= startBound)
{
throw new ArgumentException("When using the multi-mapping APIs ensure you set the splitOn param if you have keys other than Id", "splitOn");
}
注释掉这一部分可以解决问题,Dapper继续正常运行。这是一个已知问题,是否有更好的解决方法?
有问题的SQL类似于:
DECLARE @Temp TABLE (Id INT, Something BIT);
INSERT INTO @Temp SELECT Id, Something from Table;
WITH CTE AS (
SELECT * FROM dbo.MyTable mt LEFT JOIN @Temp t ON t.Id=mt.Id;
) SELECT CTE.* FROM CTE LEFT JOIN dbo.AnotherTable at ON at.Id=CTE.Id;
当我运行查询时,可能是由于查询设置,当数据不存在时,数据集中没有返回任何列。我的示例可能不会很好地显示,但实际查询很长,这就是行为。