한 행의 여러 객체 다 퍼치기

c# dapper

문제

한 행 데이터베이스에서 오는 있어요

select "John" Name, 
       "Male" Gender,
       20 Age,
       "Rex" PetName,
       "Male" PetGender,
       5 PetAge
       // ... many more ...

Dapper를 사용하여이 행을 두 개의 객체로 가져 오려고합니다.

class Person
{
    public string Name { get; set; }
    public string Gender { get; set; }
    public int Age { get; set; }
    // ... many more ...
}    
class Pet
{
    public string PetName { get; set; }
    public string PetGender { get; set; }
    public int PetAge { get; set; }
    // ... many more ...
}

참고 : 여기에는 계층적인 관계가 없으며 한 데이터베이스 행을 두 개 이상의 객체로 매핑하려고합니다.

어떻게해야할까요?

  • 나는 동적 인 것을 돌려주고 각 객체를 수동으로 매핑함으로써 이것을 할 수 있다는 것을 안다. 나의 시나리오에서는 많은 수의 컬럼을 가지고있는 것처럼 고통 스럽다. 나는 이것을하지 않을 것입니다. (더 이상 열을 더 적게 사용하도록 다시 디자인 할 수는 없습니다.)

내가 시도한 것 :

  • QueryMultiple<Person,Pet> 살펴 QueryMultiple<Person,Pet> 여러 쿼리를 실행한다고 가정합니다. 실제 시나리오에서는 매우 비싼 쿼리이므로 한 번 실행하고 싶습니다.
  • 또한 Query<Person,Pet,Tuple<Person,Pet>> 를 반환하는 방법을 살펴 보았습니다.하지만 여기에는 Id 열이 필요합니다. 여기에는 hierearchical relationship이나 Id 가 없습니다. 난 단지 하나의 행을 가져 와서 여러 열로 매핑하려고합니다.

수락 된 답변

당신은 Query 메소드로 거의 해결책에 가깝습니다. Id 열이 splitOn 인수를 제공 할 수 있습니다.

connection.Query<Person, Pet, Tuple<Person, Pet>>(sql, 
    (person, pet) => Tuple.Create(person, pet), splitOn: "PetName");


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