使用CustomPropertyTypeMap映射特定属性
本文关键字:属性 映射 CustomPropertyTypeMap 使用 | 更新日期: 2023-09-27 18:28:08
我有几个类,它们需要有一个或两个属性(几十个属性中的一个)映射到具有不同列名的表上的列。当数据库中的列名只有两个不同时,我不想映射所有属性。
我找不到关于所有可与CustomPropertyTypeMap一起使用的各种映射选项的像样的文档,它们都只是显示了用CustomPropertyTypeMap映射整个对象(Dapper测试类也是如此)。当我使用以下内容时:
// Set up custom repository parameter mappings.
var map = new CustomPropertyTypeMap(typeof(T),
(type, columnName) => type
.GetProperties()
.FirstOrDefault(
prop => prop.GetCustomAttributes(false)
.OfType<RepositoryParameterAttribute>()
.Any(attr => attr.ParameterName == columnName)));
Dapper.SqlMapper.SetTypeMap(typeof(T), map);
// Query the database
items = await databaseConnection.QueryAsync<T>(
storedProcedure,
itemParameters,
commandType: CommandType.StoredProcedure,
transaction: transaction);
未使用RepositoryParameterAttribute修饰的属性返回null(或0)。我可以用它来映射特定的属性,并让Dapper水合剩余的未装饰属性吗?还是我必须做一些自定义的事情?
谢谢。
CustomPropertyTypeMap
和使用DefaultTypeMap
作为回退来实现这一点。
它作为NuGet包提供,但您也可以查看源代码,看看我是如何实现CustomerPropertyTypeMap
的,并为自己创建一个更简单的实现。