: 말끔이 '푸'유형에 대한 IDataReader에 분할 할 때Dapper의 멀티 맵을 형식마다 명시 적으로 사용할 수 있습니까? 단정 한 (단정-도트 넷)의 multimap에 의미를 사용할 때 우리는 다음과 같은 기능을 찾고
SqlMapper.Configure.ForTypeUseFunc<T>(Func<dynamic,T> func);
//example usage
Func<object,Foo> fooFunc = (dynamic o) =>
new Foo{
Name = o.Name,
Status = (StatusTypes)o.StatusID
};
SqlMapper.Configure.ForTypeUseFunc<Foo>(fooFunc);
cnn.Query<Foo,Bar,Foo>...
는 그래서 모든 값을 전달 동적으로 fooFunc
으로 바뀌므로 결과적으로 '막대'에 대해서도 동일하게 적용됩니다. 전달 된 '동적'객체는 분할 열을 나타냅니다 (그리고 일반 다중지도에는 중복 된 열 이름이있을 수 있습니다).
어떻게 해결할 수 있습니까?
배경
우리는 광범위 일부 레거시 데이터베이스에 말끔를 사용하지만, 때문에 오래된 패턴의 많은 등 객체 (다른 열 이름, 중첩 된 객체에 결과를 매핑하는 동적 출력을 사용하도록 강요)
실제로 우리가 수동 매핑을 작성하고 있지만 데이터베이스 (우리가 제어 할 수없는 영역)와 객체 사이의 불일치는 Func에서 완벽하고 명확하게 정의됩니다. 50 개의 테이블 (중형이라고 생각할 것입니다)의 데이터베이스는 매핑하는 데 단지 2 시간 밖에 걸리지 않으며 모든 개발 시간의 아주 작은 부분을 나타냅니다. 그만한 가치가 있습니다.
그게 좋은 부분입니다.
우리가 고민하고있는 부분은 사용했을 때 완벽하게 작동한다고해도 코드에서 올바른 코드 재사용을 얻는 데 어려움을 겪고 있다는 것입니다. 이상적으로 우리는 Dapper의 멀티 맵을 사용하지만 유형별 Func을 할당 할 수있는 방법이 있습니다.
ITypeMap 및 IMemberMap을 살펴본 결과 필드 당 사용자 정의 매핑이 사용 된 것으로 보입니다. 우리는 실제로 유형별 기본 매핑을 찾고 있습니다 (할당을 처리 할 것입니다).
나는 이것을 Dapper 자신에게 (그리고 과거에 그렇게 약간 기여했지만) 기꺼이 만들었지 만 약간의 지침을 좋아할 것입니다.
감사합니다.
UPDATE 나는 현재 Query<dynamic,dynamic,Foo>
을 시도하고 있지만 제대로 분할되지
. 제대로 분할되면 우리에게 도움이 될 수 있습니다. 우리는 효과적으로 우리의 FUNC로 각 동적 연결하고 우리의 강력한 형식의 개체를 반환 할 수 :
Query<dynamic,dynamic,Tuple<Foo,Bar>>((d1,d2)=>Tuple.Create(fooFunc(d1),barFunc(d2)));