使用拍板映射列表<dynamic>

时间:2018-11-07 18:34:25

标签: c# dapper slapper.automapper

我在存储库类中有以下代码段,使用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很特别。

1 个答案:

答案 0 :(得分:0)

结果证明这是Slapper.AutoMapper中的错误。

该库支持不区分大小写的映射和基于约定的键。 SQL结果集具有MyPocoClassID,而类本身具有MyPocoClassId,就映射而言,这对于Slapper.AutoMapper来说不是问题。但是在内部Slapper.AutoMapper会(按照约定)标识MyPocoClassMyPocoClassId作为其标识符,并且它无法在结果集中找到该字段。该库使用该键来消除输出列表中的重复项(由于某种原因),并且由于它们都是“ null / empty”,因此我们仅获得一条记录。

我可以提交拉取请求以解决此问题,但是由于该库似乎未维护,因此我认为这不会有所帮助。