Dapper 중간 매핑

c# dapper orm sql-server

문제

이전 질문 에 약간 더 고급 매핑 :)

테이블 :

public class Primary
{
    public int Id { get; set; }
    public Customer Customer { get; set; }
    public DateTime Date { get; set; }
    public List<Secondary> Secondaries { get; set; }
}

public class Secondary
{
    public int Id { get; set; }
    public DateTime Date { get; set; }
    public List<Tertiary> Tertiarys { get; set; }
}

public class Tertiary
{
    public int Id { get; set; }
    public DateTime Date { get; set; }
}

public class Customer
{
    public int Id { get; set; }
    public string Name { get; set; }
}

수업 :

public class Primary
{
    public int Id { get; set; }
    public Customer Customer { get; set; }
    public DateTime Date { get; set; }
    public List<Secondary> Secondaries { get; set; }
}

public class Secondary
{
    public int Id { get; set; }
    public DateTime Date { get; set; }
    public List<Tertiary> Tertiarys { get; set; }
}

public class Tertiary
{
    public int Id { get; set; }
    public DateTime Date { get; set; }
}

public class Customer
{
    public int Id { get; set; }
    public string Name { get; set; }
}

하나의 선택을 사용하여 모두 채울 수 있습니까? 이 같은:

public class Primary
{
    public int Id { get; set; }
    public Customer Customer { get; set; }
    public DateTime Date { get; set; }
    public List<Secondary> Secondaries { get; set; }
}

public class Secondary
{
    public int Id { get; set; }
    public DateTime Date { get; set; }
    public List<Tertiary> Tertiarys { get; set; }
}

public class Tertiary
{
    public int Id { get; set; }
    public DateTime Date { get; set; }
}

public class Customer
{
    public int Id { get; set; }
    public string Name { get; set; }
}

그리고:

public class Primary
{
    public int Id { get; set; }
    public Customer Customer { get; set; }
    public DateTime Date { get; set; }
    public List<Secondary> Secondaries { get; set; }
}

public class Secondary
{
    public int Id { get; set; }
    public DateTime Date { get; set; }
    public List<Tertiary> Tertiarys { get; set; }
}

public class Tertiary
{
    public int Id { get; set; }
    public DateTime Date { get; set; }
}

public class Customer
{
    public int Id { get; set; }
    public string Name { get; set; }
}

Edit1 - 두 개의 중첩 된 루프 (foreach 보조 -> foreach 3 차)를 사용하여 각 항목에 대한 쿼리를 수행 할 수 있지만 단일 데이터베이스 호출로 수행 할 수 있는지 궁금합니다.

Edit2 - QueryMultiple 메서드는 여기에 적합 할 수도 있지만 올바르게 이해하면 여러 select 문이 필요할 것입니다. 내 실생활 예제에서 select는 where 절에서 20 개 이상의 조건을 가지며, 검색 매개 변수가 null 일 수 있으므로 모든 쿼리의 모든 문장을 반복하지 않아도됩니다.

수락 된 답변

Dapper는 다중 매핑을 지원하며 설명서는 http://code.google.com/p/dapper-dot-net/을 참조하십시오.

다음은 현재 작업중인 프로젝트 중 하나의 예입니다.

        var accounts2 = DbConnection.Query<Account, Branch, Application, Account>(
                    "select Accounts.*, SplitAccount = '', Branches.*, SplitBranch = '', Applications.*" +
                    " from Accounts" +
                    "    join Branches" +
                    "       on Accounts.BranchId = Branches.BranchId" +
                    "    join Applications" +
                    "       on Accounts.ApplicationId = Applications.ApplicationId" +
                    " where Accounts.AccountId <> 0",
                    (account, branch, application) =>
                    {
                        account.Branch = branch;
                        account.Application = application;
                        return account;
                    }, splitOn: "SplitAccount, SplitBranch"
                    ).AsQueryable();

트릭은 splitOn 옵션을 사용하여 레코드 세트를 여러 오브젝트로 나눕니다.

위 질문에 대한 클래스 구조를 보려면 내 질문을 확인하십시오. Dapper Multi-mapping Issue


인기 답변

SQLCommand를 작성한 다음, SQLParameter 오브젝트를 작성하는 것은 어떻습니까? 이상적으로는 저장된 proc를 가지고 있지만 그렇게 할 필요는 없습니다.

그런 다음 각 출력 매개 변수를 다시 클래스에 매핑 할 수 있습니다.

Stack의 다른 게시물 에는 관련성이있는 몇 가지 코드가 있습니다.




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