使用 Slapper 的映射列表<dynamic>
Mapping List<dynamic> using Slapper
我在存储库 class 中获得了以下代码片段,使用 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 需要知道我的 class 的键来简单地将一个列表映射到另一个列表?它是否试图消除重复项?我还会注意到,这只会在映射我的某个 POCO 时发生(到目前为止)......我无法弄清楚为什么这个特定的 POCO 很特别。
原来这是 Slapper.AutoMapper 中的错误。
该库支持不区分大小写的映射和基于约定的键。 SQL 结果集有 MyPocoClassID
而 class 本身有 MyPocoClassId
—— 就映射而言,这对 Slapper.AutoMapper 不是问题。但在内部 Slapper.AutoMapper 标识(按照惯例)MyPocoClass
具有 MyPocoClassId
作为其标识符,并且它无法在结果集中找到该字段。该库使用该键来消除输出列表中的重复项(出于某种原因),并且由于它们都是 'null/empty',我们只得到一个记录。
我可能会提交一个 pull request 来解决这个问题,但由于库似乎没有维护,我认为它不会有帮助。
我在存储库 class 中获得了以下代码片段,使用 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 需要知道我的 class 的键来简单地将一个列表映射到另一个列表?它是否试图消除重复项?我还会注意到,这只会在映射我的某个 POCO 时发生(到目前为止)......我无法弄清楚为什么这个特定的 POCO 很特别。
原来这是 Slapper.AutoMapper 中的错误。
该库支持不区分大小写的映射和基于约定的键。 SQL 结果集有 MyPocoClassID
而 class 本身有 MyPocoClassId
—— 就映射而言,这对 Slapper.AutoMapper 不是问题。但在内部 Slapper.AutoMapper 标识(按照惯例)MyPocoClass
具有 MyPocoClassId
作为其标识符,并且它无法在结果集中找到该字段。该库使用该键来消除输出列表中的重复项(出于某种原因),并且由于它们都是 'null/empty',我们只得到一个记录。
我可能会提交一个 pull request 来解决这个问题,但由于库似乎没有维护,我认为它不会有帮助。