Dapper SetTypeMap打破DapperExtension的ClassMapper

时间:2018-02-16 18:12:56

标签: c# .net dapper dapper-extensions

在我的项目中,我使用自定义SqlMapper在dapper中映射我的Db列,但是当我通过执行以下操作设置Dapper以使用我的自定义类型映射器时:

Dapper.SqlMapper.SetTypeMap(typeof(User), new UserMapper());

DapperExtension不再能够映射我的User类,所以当我这样做时:

User item = cn.Get<User>(id);

该项目仅包含默认值。

我的UserMapper不会干扰DapperExtensions的ClassMapper实现,它只实现了SqlMapper.ITypeMap

您认为它以任何方式覆盖DapperExtensions功能吗? 谢谢你的帮助

1 个答案:

答案 0 :(得分:1)

经过进一步调查,我终于找到并解决了问题: 假设我的UserMapper中有一个属性 Id 的TestClass映射到数据库列 UserId

  • Dapper 执行查询(例如SELECT * FROM Users)时,它会向我的UserMapper询问它可以映射列的属性&#34; UserId&#34; (=&gt; Id)。
  • DapperExtension 执行查询时,它会向我的UserMapper询问它可以映射列的属性&#34; Id&#34; (=&gt;?)。这是因为 DapperExtension 执行查询,例如&#34; SELECT UserId As Id FROM Users&#34;所以列已经映射,但是我的UserMapper找不到使用Name = Id映射的IPropertyMap。

通过检查 ColumnName = Id 的IPropertyMap搜索是否失败来解决;如果是这样,我通过使用 名称 = Id 搜索IPropertyMap来回退。

如果您认为可以更好地解决这个问题,请告诉我们 谢谢!