Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用CustomPropertyTypeMap映射特定属性_C#_Sql_Data Access Layer_Dapper_Dapper Extensions - Fatal编程技术网

C# 使用CustomPropertyTypeMap映射特定属性

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

我有几个类需要将一个或两个属性(几十个属性中的一个)映射到具有不同列名的表上的列。我不想映射所有属性,因为只有两个属性与数据库中的列名不同

在CustomPropertyTypeMap可以使用的各种映射选项上,我找不到合适的文档,它们都只是显示了使用CustomPropertyTypeMap映射整个对象(Dapper tests类也是如此)。当我使用以下命令时:

// 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使用了这里提出的回退映射器解决方案,它只是一个更完整的解决方案,带有映射类,没有反射麻烦。很好,感谢您的帮助。我要把它拆下来!