Dapper SetTypeMap 破坏了 DapperExtension 的 ClassMapper
Dapper SetTypeMap Breaks DapperExtension's ClassMapper
在我的项目中,我使用自定义 SqlMapper 在 dapper 中映射我的 Db 列,但是当我设置 Dapper 以使用我的自定义类型映射器时:
Dapper.SqlMapper.SetTypeMap(typeof(User), new UserMapper());
DapperExtension 不再能够映射我的用户 class 所以当我这样做时:
User item = cn.Get<User>(id);
此项仅包含默认值。
我的 UserMapper 不干扰 DapperExtensions 的 ClassMapper 实现,它只实现 SqlMapper.ITypeMap
您认为它会以任何方式覆盖 DapperExtensions 功能吗?
感谢您的帮助
经过进一步排查,终于找到并解决了问题:
假设我有一个 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 来回退
如果您认为可以用更好的方式解决这个问题,请告诉我
谢谢!
在我的项目中,我使用自定义 SqlMapper 在 dapper 中映射我的 Db 列,但是当我设置 Dapper 以使用我的自定义类型映射器时:
Dapper.SqlMapper.SetTypeMap(typeof(User), new UserMapper());
DapperExtension 不再能够映射我的用户 class 所以当我这样做时:
User item = cn.Get<User>(id);
此项仅包含默认值。
我的 UserMapper 不干扰 DapperExtensions 的 ClassMapper 实现,它只实现 SqlMapper.ITypeMap
您认为它会以任何方式覆盖 DapperExtensions 功能吗? 感谢您的帮助
经过进一步排查,终于找到并解决了问题: 假设我有一个 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 来回退如果您认为可以用更好的方式解决这个问题,请告诉我 谢谢!