Dapper 및 Subclass

dapper

문제

서브 클래 싱 된 객체를 포함하는 기존 EF 데이터 모델로 작업하고 있습니다. 개별 객체로 작업 할 때 제대로 작동하지만 많은 수의 객체를로드하여 분석 할 때 속도가 매우 느립니다.

필자는 읽기 전용 분석에 사용되는 POCO 객체를 채우기위한 대안으로 Dapper 를 탐색하기 시작했습니다.

문제는 객체 계층을 올바르게 처리 할 수있는 방법이 없다는 것입니다.

만약 내가 가지고 있다면

class MyBase
{
}

class MyDerived1 : MyBase
{
}

class MyDerived2 : MyBase
{
}

Dapper가 MyBase 의 목록을 올바르게 채 웁니다.

var mine = conn.Query<MyBase>("SELECT * from MyTable");

Multimap 기능은 문제를 해결하지 못합니다 (또는 뭔가 빠졌습니까?).

이 문제를 해결할 수있는 방법이 있습니까? 각 하위 클래스에 대해 데이터베이스를 한 번 왕복하는 것이 부족합니까?

수락 된 답변

 public class MyBase
    {
        public String BaseProp { get; set; }
    }

    public class MyDerived1 : MyBase
    {
        public String Derived1Prop { get; set; }
    }

    public class MyDerived2 : MyBase
    {
        public String Derived2Prop { get; set; }
    }

멀티 매핑 또는 동적 매핑이 트릭을 수행해야합니다.

MM :

String query = "SELECT * FROM Table";

var res = conn.Query<MyBase, MyDerived1, MyDerived2, Tuple<MyBase, MyDerived1, MyDerived2>>(query, (b, d1, d2) => Tuple.Create(b, d1, d2), splitOn: "Derived1Id,Derived2Id");

여기에 이미지 설명을 입력하십시오.

동적 매핑은 또한 매우 차갑고 아마도 귀하의 경우보다 유연합니다 (Thanks @Sam!).

var res = conn.Query<dynamic>(query).Select(x => new Tuple<MyBase, MyDerived1, MyDerived2>(new MyBase() { BaseProp = x.BaseProp },
                                                                                                           new MyDerived1() { Derived1Prop = x.Derived1Prop },
                                                                                                           new MyDerived2() { Derived2Prop = x.Derived2Prop }));


아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow