2017-05-11 115 views
0

我試圖用小巧玲瓏的在我的項目,以加快數據加載(目前使用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; 

我用我的實體框架實體作爲波蘇斯和他們是

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

什麼是執行查詢和地圖我的數據到波蘇斯或實體的最簡單的方法?

我試圖

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

但它也沒有工作。

我可以映射VwArtikliGridV2,但我不能映射任何嵌套的對象。它們始終爲空。

我該怎麼辦?

回答

0

Dapper映射事物平坦。起初,這感覺像是一個很大的痛苦,因爲EF很容易嵌套。但是,一旦你克服了最初的痛苦,你就會意識到它有多簡單,可預測和注重性能。也許額外15分鐘。爲不可觸及的表現提供查詢手段。

我在這裏回答了一個類似的問題return a list of data via stored proc to dapper

您應該能夠返回多個數據集(一個用於父項,一個用於底層標記等),並將它們合併到您的應用層。

0

正如BlackjacketMack在他的回答中所說,我認爲多個數據集是最好的選擇。

您可能希望在小巧玲瓏的文檔來看看功能多映射單行拆分爲多個對象,QueryMultiple從單個查詢讀取多個結果集。

顯然,這意味着修改您的查詢以返回多個結果集,但可以實現您正在查找的內容。

的例子可以在這裏找到: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()。我發現這非常有用,可以幫助我理解父子集合的類似問題,其中子節點包含單行返回的不同對象類型。