2017-05-11 39 views
0

私は(現在使用してEF6)ここで Dapperのマルチレベルのネスト

がある私のSQLデータの読み込みを高速化するために私のプロジェクトでDapperのを使用しようとしています、私はPOCOSとして私のEntity Frameworkのエンティティを使用しています

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; 

と彼らは

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; } 

POCOSまたはエンティティに自分のデータをクエリを実行し、マッピングするための最も簡単な方法は何ですか

を持っていますか?

私は

Dapper.Mapper

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(); 

を試みたが、それもうまくいきませんでした

仕事didnot。

私はVwArtikliGridV2をマップすることができますが、ネストされたオブジェクトをマップすることはできません。それらは常にnullです。

私は何を試すことができますか?

答えて

0

Dapperマップはフラットです。最初は、EFが物事を簡単に入れ子にするので、これは大きな苦痛のように感じます。しかし、最初の痛みを乗り越えれば、どれくらいシンプルで、予測可能で、パフォーマンス指向であるかがわかります。おそらく余分な15分。触れられないパフォーマンスのためのクエリー作成

私は同様の質問に答えましたreturn a list of data via stored proc to dapper

複数のデータセット(親アイテム用、下位タグ用など)を返すことができ、それらをアプリケーション層で結合できるはずです。

0

BlackjacketMack氏の答えによると、私は複数のデータセットが行く方法だと思います。

あなたは、単一のクエリから複数の結果セットを読み取るために、複数のオブジェクトに単一の行を分割し、QueryMultipleする機能マルチマッピングでDapperのドキュメントで見たいと思うかもしれません。

明らかに、それは複数の結果セットを返すようにクエリを変更することを意味しますが、探しているものを達成することができます。

例としては、ここで見つけることができます:https://github.com/StackExchange/Dapper/blob/master/Dapper.Tests/MultiMapTests.cs

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

は特に、あなたはMultiMapTests.csのメソッドpublic void TestMultiMapThreeTypesWithGridReader()を見てみたいことがあります。私は、子供が1つの行に返されるさまざまなオブジェクトタイプを含む子コレクションを持つ親の同様の問題を理解するのに役立つことがわかりました。

関連する問題