중첩 된 다중 매핑에 대한 Dapper 구문

.net dapper multi-mapping

문제

    class Person
    {
        Address Addr { get; set; }
        int Age { get; set; }
    }

    class Address 
    {
        string StreetName { get; set; }
        County Cnty { get; set; }
    }

    class County
    {
         string CntyName;
         string CntyCode;
    }

다음은 데이터베이스의 데이터를 채우는 Stored Proc입니다.

    Create Procedure SpGetAllPersons
    As
    Select CntyName, CntyCode, StreetName, Age from Persons

나는 아래 쿼리를 작성하려고했지만 예외가 발생했습니다.

    DBConn.Query<County, Address , Person, Person>
    (DomainConstants.SpGetAllPersons,
    (cnty, address, person) =>
    {
            address.Cnty = cnty;
            person.Addr = address;
            return person;
    },
    commandType: CommandType.StoredProcedure,
    splitOn: "StreetName, Age").ToList();

아래 개념을 사용하려고했지만 단일 객체 만 반환합니다. 나는 명단이 필요해.

     var sql =
    @"select 
        1 as PersonId, 'bob' as Name, 
        2 as AddressId, 'abc street' as Name, 1 as PersonId,
        3 as Id, 'fred' as Name
        ";
                var personWithAddress = connection.Query<Person, Address, Extra, Tuple<Person, Address, Extra>>
                    (sql, (p, a, e) => Tuple.Create(p, a, e), splitOn: "AddressId,Id").First();

미리 감사드립니다.

수락 된 답변

그것에 뛰어 드는 Mark와 Bob에게 감사드립니다. 다른 방법으로 문제를 해결할 수있었습니다.

    DBConn.Query(DomainConstants.SpGetAllPersons, commandType: CommandType.StoredProcedure)
    .Select(x => new Person
    {
        Addr = new Address
        {
            Cnty = new County
            {
                CntyName = x.CntyName,
                CntyCode = x.CntyCode
            },
            StreetName = x.StreetName
        },
        Age = x.Age
    }).ToList();

전문가 답변

음, 예를 들어 당신은 하나의 행을 선택하는, 그래서 어느 하나 이상 반환하지 않습니다. 그러나 Query<T>IQueryable<T> 반환합니다. 당신은 .First() 호출하고 있습니다 .First() 그래서 당신이 정확히 하나의 결과를 얻는 것은 놀라운 일이 아닙니다. 명령문의 마지막 부분을 .ToList() 를 사용하도록 변경하면 .ToList() 하나의 항목이있는 목록이 생성됩니다.



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