2012-04-19 5 views
5

나는 다음과 같이 프로필 정보를 검색하고 있습니다 :Dapper ORM을 사용하여 하위 개체의 값을 가져 오는 방법은 무엇입니까?

var profiles = connection.Query<Models.PROFILE>("SELECT * FROM PROFILES WHERE [email protected]", new { ID = profileID }); // IEnumerable 
var profile = profiles.First<Models.PROFILE>(); 

프로파일 객체가 profileImages 같은 다른 컬렉션이 포함되어 있습니다. 문제는 모든 하위 개체의 항목 수가 0입니다. 또한 저는 단지 profileImages에 대한 데이터 만 얻고 싶습니다.

자식 개체를 쿼리하기 위해 설정해야하는 것이 있습니까? 그렇다면 어느 수준을 지정할 수 있습니까?

   var profiles = connection.Query<Models.PHOTOS_PERMISSIONS, Models.PROFILE, Models.PHOTOS_PERMISSIONS>(sql, 
        (p1, p2) => { p1.ID = profileID; return p1; }, 
        new { ID = profileID }, 
        splitOn: "OWNER_PROFILESIDFK, ID").AsQueryable(); 

PHOTOS_PERMISSIONS.OWNER_PROFILESIDFK = PROFILE.ID

을 그리고 다음과 같은 오류 점점 : 내 splitOn에있어 어떤 변화를 시도

When using the multi-mapping APIs ensure you set the splitOn param if you have keys other than Id Parameter name: splitOn

는 또한 multimapping 시도 텍스트이지만 여전히 동일한 오류가 발생합니다.

답변

8

Dapper는 기본적으로 이처럼 일대 다 매핑을 지원하지 않습니다. 이 질문을 확인해보십시오. 그래도 도움이 될 수 있습니다.

Multi-Mapping, one-to-many

당신의 PROFILEIMAGES 테이블은 FK 프로파일에 ID가있는 경우 - 당신은 2 querys를 발행하고 GridReader를 사용할 수 있습니다.

var sql = 
@" 
select * from PROFILES where profileId= @id 
select * from PROFILEIMAGES where OWNER_PROFILESIDFK = @id"; 

using (var multi = connection.QueryMultiple(sql, new {id=selectedId})) 
{ 
    var profile = multi.Read<Models.PROFILE>().Single(); 
    profile.ProfileImages = multi.Read<Model.PROFILEIMAGES>().ToList(); 
} 
+0

니스. 사실이 모든 것이 1 .. * 매핑을 반환하는 것보다 좋기 때문에 복잡한 객체가 부풀어 올 수 있습니다. 물론 그들은 많은 정보를 가지고 있지만 필요하지 않은 정보도 있습니다. 이렇게하면 데이터를 가져올 하위 테이블을 명시 적으로 요청할 수 있습니다. 감사. – ElHaix

관련 문제