.질문 <T> 중첩 된 객체가있는 T의 경우

c# dapper orm

문제

가능한 중복 :
Dapper를 사용하여 집계 객체를 효율적으로 선택하려면 어떻게해야합니까?

중첩 된 객체를 인스턴스화하는 데 dapper를 사용할 수 있습니까? 그렇다면 작동중인 예가 있습니까?

대부분의 경우, .net 프리미티브만으로도 충분하지만 항상 그런 것은 아닙니다. 해킹은 외래 키를 부모 유형에 프리미티브로 포함시킨 다음 나중에 이들을 기반으로 인스턴스화하는 것일 수 있습니다. 나는 이것이 POCO 모델에서 불필요한 잡음을 발생시킬 수 있기 때문에 이것이 필요하지 않기를 바라고 있습니다.

수락 된 답변

나는 여기에서 제안하는 도우미라고 생각한다 : 객체 계층 구조를 만드는 다중 매퍼 가 도움이 될 수있다.

public static IEnumerable<TFirst> Map<TFirst, TSecond, TKey>
    (
    this GridReader reader,
    Func<TFirst, TKey> firstKey, 
    Func<TSecond, TKey> secondKey, 
    Action<TFirst, IEnumerable<TSecond>> addChildren
    )
{
    var first = reader.Read<TFirst>().ToList();
    var childMap = reader
        .Read<TSecond>()
        .GroupBy(s => secondKey(s))
        .ToDictionary(g => g.Key, g => g.AsEnumerable());

    foreach (var item in first)
    {
        IEnumerable<TSecond> children;
        if(childMap.TryGetValue(firstKey(item), out children))
        {
            addChildren(item,children);
        }
    }

    return first;
}

GridReader와 매퍼 (mapper)를 확장한다고 가정합니다.

public static IEnumerable<TFirst> Map<TFirst, TSecond, TKey>
    (
    this GridReader reader,
    Func<TFirst, TKey> firstKey, 
    Func<TSecond, TKey> secondKey, 
    Action<TFirst, IEnumerable<TSecond>> addChildren
    )
{
    var first = reader.Read<TFirst>().ToList();
    var childMap = reader
        .Read<TSecond>()
        .GroupBy(s => secondKey(s))
        .ToDictionary(g => g.Key, g => g.AsEnumerable());

    foreach (var item in first)
    {
        IEnumerable<TSecond> children;
        if(childMap.TryGetValue(firstKey(item), out children))
        {
            addChildren(item,children);
        }
    }

    return first;
}

이 패턴을 확장하여 3 레벨 계층 구조로 작업 할 수 있습니다.




아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.