我在存储库类中有以下代码段,使用Dapper进行查询,使用Slapper.Automapper进行映射:
class MyPocoClass{
MyPocoClassId int;
...
}
//later:
var results = connection.Query<dynamic>("select MyPocoClassID, ...");
return AutoMapper.MapDynamic<MyPocoClass>(results).ToList();
上面的 results
有很多项目,但是AutoMapper.MapDynamic
返回的列表只有一个项目(这显然是错误的)。但是,我发现将以下配置添加到AutoMapper可以解决此问题:
AutoMapper.Configuration.AddIdentifier(typeof(MyPocoClass), "MyPocoID");
为什么Slapper.AutoMapper需要知道我的类的键才能将一个列表简单地映射到另一个列表?是否要消除重复?我还将注意到,这仅在映射我的某个POCO时才发生(到目前为止)...而且我不知道为什么这个特定的POCO很特别。
答案 0 :(得分:0)
结果证明这是Slapper.AutoMapper中的错误。
该库支持不区分大小写的映射和基于约定的键。 SQL结果集具有MyPocoClassID
,而类本身具有MyPocoClassId
,就映射而言,这对于Slapper.AutoMapper来说不是问题。但是在内部Slapper.AutoMapper会(按照约定)标识MyPocoClass
以MyPocoClassId
作为其标识符,并且它无法在结果集中找到该字段。该库使用该键来消除输出列表中的重复项(由于某种原因),并且由于它们都是“ null / empty”,因此我们仅获得一条记录。
我可以提交拉取请求以解决此问题,但是由于该库似乎未维护,因此我认为这不会有所帮助。