2016-06-01 5 views
2

이의 내가 병합 된 형태로 내 데이터베이스에 저장된 연락처, 같은 나는이처럼를 조회하는 것이 있다고 가정 해 봅시다 :단정 한 멀티 매핑 두 가지 속성

SELECT Name, HomeHouseNumber, HomePostcode, WorkHouseNumber, WorkPostcode FROM Contacts 

내가에 좀 더 구조를 원하는 내 C# 코드를 작성하고 집과 직장 주소로 연락처를 간단하게 정의하십시오.

class Address 
{ 
    public string HouseNumber { get; set; } 
    public string Postcode { get; set; } 
} 

class Contact 
{ 
    public string Name { get; set; } 
    public Address HomeAddress { get; set; } 
    public Address WorkAddress { get; set; } 
} 

나는이 같은 선택의 열을 앨리어싱하여 집 주소를 추출 할 멀티 매핑을 사용할 수 있습니다 발견했습니다 : 나는 그런 방법으로 직장 주소 열 별칭을 할 수 그러나

IEnumerable<Contact> GetContacts() 
{ 
    return Connection.Query<Contact, Address, Address, Contact>(
     "SELECT Name, HomeHouseNumber as HouseNumber, HomePostcode as Postcode, WorkHouseNumber, WorkPostcode FROM Contacts", 
     (contact, home, work) => 
     { 
      contact.HomeAddress = home; 
      contact.WorkAddress = work; 
      return contact; 
     }, 
     splitOn: "HouseNumber,WorkHouseNumber"); 
} 

그들이 매핑 될 것입니다. Dapper가이 매핑을 수행 할 수 있습니까, 아니면 수동으로해야합니까?

답변

3

솔루션은 믿을 수 없을만큼 열에 동일한 별칭을 지정하는 것입니다. 나는 SQL이 이것을 허용 할 것이라고 생각하지는 않았지만 Dapper가 완벽하게 매핑합니다.

IEnumerable<Contact> GetContacts() 
{ 
    return Connection.Query<Contact, Address, Address, Contact>(
     "SELECT Name, HomeHouseNumber as HouseNumber, HomePostcode as Postcode, WorkHouseNumber as HouseNumber, WorkPostcode as Postcode FROM Contacts", 
     (contact, home, work) => 
     { 
      contact.HomeAddress = home; 
      contact.WorkAddress = work; 
      return contact; 
     }, 
     splitOn: "HouseNumber,HouseNumber"); 
} 
관련 문제