dapper -multi-mapping : flat SQL은 중첩 된 객체로 돌아갑니다.

c# dapper

문제

주소 개체가 포함 된 회사가 있습니다. SQL 반환 값은 평평하고 모든 개체를로드하는 Query <>를 얻으려고합니다.

cnn.Query<Company,Mailing,Physical,Company>("Sproc", 
                    (org,mail,phy) =>
                    {
                        org.Mailing = mail;
                        org.Physical = phy;
                        return org;
                    },
                    new { ListOfPartyId = stringList }, null, true, commandTimeout: null,
                    commandType: CommandType.StoredProcedure, splitOn: "MailingId,PhyscialId").ToList();

내가 SplitOn 올바른지 모르겠다. 메시지가 나타납니다.

다중 매핑 API를 사용할 때 Id가 아닌 키가 있으면 splitOn 매개 변수를 설정하십시오. 매개 변수 이름 : splitOn

제안은 좋을 것입니다.

Test.cs의 예제는 코드가 쿼리의 매개 변수로 묻는 내용이 아닙니다. 업데이트해야합니다.

수락 된 답변

나를 위해 이것은 완벽하게 작동합니다 ... 아마 오타가 있을까요?

PhyscialId 가 확실히 하나처럼 보입니다.

class Company
{
    public int Id { get; set; }
    public string Name { get; set; }
    public Mailing Mailing { get; set; }
    public Physical Physical { get; set; }
}

class Mailing
{
    public int MailingId { get; set; }
    public string Name { get; set; }
}

class Physical
{
    public int PhysicalId { get; set; }
    public string Name { get; set; }
}

public void TestSOQuestion()
{
    string sql = @"select 1 as Id, 'hi' as Name, 1 as MailingId, 
       'bob' as Name, 2 as PhysicalId, 'bill' as Name";
    var item = connection.Query<Company, Mailing, Physical, Company>(sql,
                (org, mail, phy) =>
                {
                    org.Mailing = mail;
                    org.Physical = phy;
                    return org;
                },
                    splitOn: "MailingId,PhysicalId").First();


    item.Mailing.Name.IsEqualTo("bob");
    item.Physical.Name.IsEqualTo("bill");

}



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