2012-04-02 1 views
0

Dapper에 대해 간단한 질문이 있습니다. 4 테이블을 반환하는 쿼리가 있습니다.Dapper의 단일 객체에 4 개의 테이블 매핑

세 개의 테이블에는 정수 열이 하나만 있습니다. field1, field2 및 field3이라고합니다.

네 번째 테이블에는 다음과 같이 5 개의 열이 있습니다. A, B, C, D, E.

나는 4 개 테이블

public class ResultSet 
{ 
    int field1; 
    int field2; 
    int field3; 
    string A; 
    string B; 
    string C; 
    string D; 
    string E 
} 

에서 모든 필드 어떻게이 ResultSet 객체에 대한 결과를 매핑 할을 가지고 ResultSet라는 개체를 만들었습니다?

현재 원하는 결과를 얻으려면 QueryMultiple을 사용하고 있습니다. 그러나 첫 번째 3 열만 매핑됩니다. A, B, C, D 및 E는 모두 null입니다.

유니온을 사용하여 하나의 테이블에서 모든 필드를 가져오고 싶지 않습니다.

+0

몇 가지 코드를 보여 주시겠습니까? 그렇게하면 도움이됩니다. – Alex

답변

2

당신은 connection.Query 확장 메서드를 적절한 매개 변수가있는 SQL 문을 건네 주면이 작업을 수행 할 수 있어야하며 Type 매개 변수로 개체를 전달해야합니다.

Dapper는 선택 목록에있는 항목의 별명을 적절히 지정한다고 가정하면 (예 : 개체의 해당 속성 이름으로 별칭 지정) 쿼리를 개체에 마술처럼 매핑합니다. 이 라인을 따라

뭔가 작업을해야합니다 :

public class SomeObject 
{ 
    public int Field1 {get; set;} 
    public int Field2 {get; set;} 
    public int A {get; set;} 
    public int B {get; set;} 
    public int C {get; set;} 
    public int D {get; set;} 
} 

using(var connection = SomeConnectionFactory.GetConnection()) 
{ 
    var yourObject = 
     connection.Query<SomeObject>("select tab1.someThing as Field1, " + 
            "tab2.someThing as Field2, " + 
            "tab4.onePotato as A, " + 
            "tab4.twoPotato as B, " + 
            "tab4.threePotato as C, " + 
            "tab4.four as D " + 
            "from someTable tab1 " + 
            "join someTable2 tab2 on tab1.Id = tab2.Id " + 
            "$$ etc etc for the other joins $$" + 
            "where tab1.Id = :ID " + ,new {ID = someId}); 
}; 

한 노트 내가 Oracle 데이터베이스 (:)의 바인드 변수 구문을 사용한 적이 있다는 것입니다. DB에 해당하는 것으로이를 대체해야합니다.

희망은 유용합니다.