C# 使用CustomPropertyTypeMap映射特定属性
我有几个类需要将一个或两个属性(几十个属性中的一个)映射到具有不同列名的表上的列。我不想映射所有属性,因为只有两个属性与数据库中的列名不同 在CustomPropertyTypeMap可以使用的各种映射选项上,我找不到合适的文档,它们都只是显示了使用CustomPropertyTypeMap映射整个对象(Dapper tests类也是如此)。当我使用以下命令时:C# 使用CustomPropertyTypeMap映射特定属性,c#,sql,data-access-layer,dapper,dapper-extensions,C#,Sql,Data Access Layer,Dapper,Dapper Extensions,我有几个类需要将一个或两个属性(几十个属性中的一个)映射到具有不同列名的表上的列。我不想映射所有属性,因为只有两个属性与数据库中的列名不同 在CustomPropertyTypeMap可以使用的各种映射选项上,我找不到合适的文档,它们都只是显示了使用CustomPropertyTypeMap映射整个对象(Dapper tests类也是如此)。当我使用以下命令时: // Set up custom repository parameter mappings. var map = new Custo
// 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);
//设置自定义存储库参数映射。
var map=新的CustomPropertyTypeMap(类型(T),
(类型,列名称)=>类型
.GetProperties()
.第一道防线(
prop=>prop.GetCustomAttributes(false)
第()类
.Any(attr=>attr.ParameterName==columnName));
Dapper.SqlMapper.SetTypeMap(typeof(T),map);
//查询数据库
items=等待databaseConnection.QueryAsync(
存储过程,
项目参数,
commandType:commandType.StoredProcess,
交易:交易);
未使用RepositoryParameterAttribute修饰的属性返回null(或0)。我可以用它来映射特定的属性,并让Dapper对剩余的、未修饰的属性进行水合,还是我必须做一些自定义的事情
谢谢。允许您配置从POCO属性到列表的映射。它通过使用CustomPropertyTypeMap
并使用DefaultTypeMap
作为回退来实现这一点
它作为提供,但您也可以查看,看看我是如何实现
CustomerPropertyTypeMap
的,并为您自己创建一个更简单的实现。谢谢,我来看看。目前我正在使用,但需要在前端进行一些反思。我的查询是在一个通用方法中进行的,因此在服务层中,我不知道什么需要映射而不需要反射。我将查看Dapper.FluentMap,看看它是否解决了这个问题!实际上,Dapper.FluentMap使用了这里提出的回退映射器解决方案,它只是一个更完整的解决方案,带有映射类,没有反射麻烦。很好,感谢您的帮助。我要把它拆下来!