다른 열 이름을 가진 테이블의 열에 매핑되는 하나 또는 두 개의 속성 (수십 가지 중 하나)을 필요로하는 몇 가지 클래스가 있습니다. 두 개의 열만 데이터베이스의 열 이름과 다른 경우 모든 속성을 매핑하지 않으려합니다.CustomPropertyTypeMap을 사용하여 특정 속성 매핑
CustomPropertyTypeMap에서 사용할 수있는 다양한 매핑 옵션 모두에서 알맞은 문서를 찾을 수 없습니다. Dapper 테스트 클래스와 마찬가지로 CustomPropertyTypeMap을 사용하여 전체 개체를 매핑하는 것으로 나타납니다. 다음을 사용할 때 :
// 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가 남은 장식되지 않은 속성을 수화하도록 할 수 있습니까? 아니면 맞춤 설정을해야합니까?
감사합니다.
감사합니다. 지금은 [이 솔루션] (http://stackoverflow.com/questions/8902674/manually-map-column-names-with-class-properties)을 사용하고 있지만 내 의견 앞에 약간의 반성이 필요합니다. 내 쿼리는 제네릭 메소드이므로, 리플렉션없이 매핑이 필요한 서비스 레이어를 미리 알지 못합니다. 내가 Dapper를 볼거야 .FluentMap 그리고 이것이 해결되는지 보자! –
Dapper.FluentMap은 실제로 거기에 제안 된 대체 방식의 매퍼 솔루션을 사용합니다. 매핑 클래스를 사용하고 반사적 번거 로움없이 더 완벽한 솔루션 일뿐입니다. –
니스, 도움 감사합니다. 내가 뽑아 버릴거야! –