2

在我的项目中,我使用自定义 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 功能吗?谢谢您的帮助

4

1 回答 1

2

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

  • Dapper执行查询(例如 SELECT * FROM Users)时,它会询问我的 UserMapper 可以将列“UserId”(=> Id)映射到哪个属性。
  • DapperExtension执行查询时,它会询问我的 UserMapper 可以将列“Id”(=>?)映射到哪个属性。这是因为DapperExtension执行“SELECT UserId As Id FROM Users”之类的查询,因此该列已经映射,但我的 UserMapper 找不到使用 Name = Id 映射的 IPropertyMap。

通过检查搜索具有ColumnName = Id的 IPropertyMap 是否失败来解决;如果是这样,我会通过搜索Name = Id的 IPropertyMap 来回退。

如果您认为可以以更好的方式解决此问题,请告诉我,谢谢!

于 2018-02-16T23:48:33.640 回答