小巧玲珑的多层嵌套
我试图用小巧玲珑的在我的项目,以加快数据加载(目前使用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,但我不能映射任何嵌套的对象。它们始终为空。
我该怎么办?
Dapper映射事物平坦。起初,这感觉像是一个很大的痛苦,因为EF很容易嵌套。但是,一旦你克服了最初的痛苦,你就会意识到它有多简单,可预测和注重性能。也许额外15分钟。为不可触及的表现提供查询手段。
我在这里回答了一个类似的问题return a list of data via stored proc to dapper。
您应该能够返回多个数据集(一个用于父项,一个用于底层标记等),并将它们合并到您的应用层。
正如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()
。我发现这非常有用,可以帮助我理解父子集合的类似问题,其中子节点包含单行返回的不同对象类型。