다퍼 다단계 중첩

c# dapper

문제

내 프로젝트에서 Dapper를 사용하여 데이터로드 속도를 높이려고합니다 (현재 EF6 사용).

여기 내 SQL이있다.

String SQL = @"select vwArtikli_Grid_V2.ArtikalID
    ,vwArtikli_Grid_V2.ArtikalNaziv
    ,Artikli_TagLista.ArtikalTagListaID
    ,Artikli_TagLista.ArtikalTagID
    ,Artikli_Stanje.ArtikalStanjeID
    ,Artikli_Stanje.ObjekatID
    ,Artikli_Stanje.Stanje
    ,Artikli_Tagovi.GrupaID
    ,Artikli_Tagovi.ArtikalTagGrupaID
    ,Artikli_Tagovi.ArtikalTagNaziv
    ,Artikli_Tagovi.ArtikalTagPrint
    ,Artikli_Tagovi.ArtikalTagSlika
    ,Artikli_Tagovi.ArtikalTagID
    ,vwArtikli_Grid_V2.ArtikalID
from Artikli_Tagovi
inner join Artikli_TagLista on Artikli_Tagovi.ArtikalTagID = Artikli_TagLista.ArtikalTagID
right outer join vwArtikli_Grid_V2 on Artikli_TagLista.ArtikalID = vwArtikli_Grid_V2.ArtikalID
left outer join Artikli_Stanje on vwArtikli_Grid_V2.ArtikalID = Artikli_Stanje.ArtikalID;

Entity Framework Entities를 POCO로 사용하고 있습니다.

VwArtikliGridV2, Artikli_TagLista, Artikli_Tagovi, Artikli_Stanje

VwArtikliGridV2에는 두 가지 속성이 있습니다.

public virtual ICollection<Artikli_TagLista> Artikli_TagLista { get; set; }
public virtual ICollection<Artikli_Stanje> Artikli_Stanje { get; set; }

와 Artikli_TagLista가 있습니다

public virtual Artikli_Tagovi Artikli_Tagovi { get; set; }

쿼리를 실행하고 내 데이터를 POCO 또는 엔터티에 매핑하는 가장 쉬운 방법은 무엇입니까?

나는 노력했다.

대퍼. 매퍼

var Artikli = cn.Query<VwArtikliGridV2, Artikli_TagLista, Artikli_Stanje, Artikli_Tagovi> (SQL);

하지만 그것은 작동하지 않았다.

나는 또한 Slapper.AutoMapper를 시도했다.

List<dynamic> ArtikliUM = cn.Query<dynamic>(SQL).ToList();

Slapper.AutoMapper.Configuration.AddIdentifiers(typeof(Artikli_Tagovi), new List<string> { "ArtikalTagID" });
Slapper.AutoMapper.Configuration.AddIdentifiers(typeof(Artikli_TagLista), new List<string> { "ArtikalTagListaID" });
Slapper.AutoMapper.Configuration.AddIdentifiers(typeof(Artikli_Stanje), new List<string> { "ArtikalStanjeID" });


Artikli = (Slapper.AutoMapper.MapDynamic<VwArtikliGridV2>(ArtikliUM) as IEnumerable<VwArtikliGridV2>).ToList();

그러나 그것은 또한 작동하지 않았다.

나는 VwArtikliGridV2를 매핑 할 수 있지만 중첩 된 객체를 맵핑 할 수 없습니다. 그들은 항상 null입니다.

무엇을 시도 할 수 있습니까?

수락 된 답변

Dapper는 일들을 평평하게 매핑합니다. 처음에는 EF가 아주 쉽게 둥지를 짓기 때문에 이것은 큰 고통처럼 느껴집니다. 그러나 처음 통증을 극복하면 얼마나 간단하고, 예측 가능하며, 성과 지향적인지 알게됩니다. 아마도 추가 15 분. 터치 할 수없는 성능에 대한 쿼리 작성

나는 비슷한 질문에 답하기 위해 저장된 proc을 통해 데이터 목록을 반환한다 .

여러 데이터 집합 (상위 항목에 대한 태그, 기본 태그에 대한 태그 등)을 반환하고 앱 계층에서이를 결합 할 수 있어야합니다.


인기 답변

블랙 잭 메트릭 (BlackjacketMack)은 자신의 대답에서 여러 데이터 세트가 갈 길이라고 생각합니다.

다중매핑 을 사용하면 단일 행을 여러 객체로 분할하고 QueryMultiple 을 사용하면 단일 쿼리에서 여러 결과 집합을 읽을 수 있습니다.

분명히 그것은 여러 결과 집합을 반환하도록 쿼리를 수정하는 것을 의미하지만 찾고있는 것을 얻을 수 있습니다.

예제는 https://github.com/StackExchange/Dapper/blob/master/Dapper.Tests/MultiMapTests.cs 에서 찾을 수 있습니다.

https://github.com/StackExchange/Dapper/blob/master/Dapper.Tests/QueryMultipleTests.cs

특히, public void TestMultiMapThreeTypesWithGridReader() 메소드 public void TestMultiMapThreeTypesWithGridReader()public void TestMultiMapThreeTypesWithGridReader() 있습니다. 나는 자식 컬렉션에서 하나의 행에 반환 된 다른 객체 유형을 포함하는 유사한 부모 문제를 이해하는 데 매우 유용하다는 것을 알게되었습니다.



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