C# 精巧的多级嵌套
我试图在我的项目中使用Dapper来加速数据加载(目前使用EF6) 这是我的SQLC# 精巧的多级嵌套,c#,dapper,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 ,Artikl
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;
我使用我的实体框架实体作为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; }
执行查询并将数据映射到POCO或实体的最简单方法是什么
我试过了
衣冠楚楚
var Artikli = cn.Query<VwArtikliGridV2, Artikli_TagLista, Artikli_Stanje, Artikli_Tagovi> (SQL);
var Artikli=cn.Query(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();
List ArtikliUM=cn.Query(SQL.ToList();
Slapper.AutoMapper.Configuration.AddIdentifiers(typeof(Artikli_Tagovi),新列表{“ArtikalTagID”});
添加标识符(typeof(Artikli_TagLista),新列表{“ArtikalTagListaID”});
Slapper.AutoMapper.Configuration.AddIdentifiers(typeof(Artikli_Stanje),新列表{“ArtikalStanjeID”});
Artikli=(Slapper.AutoMapper.MapDynamic(ArtikliUM)作为IEnumerable.ToList();
但它也不起作用
我可以映射VwArtikliGridV2,但无法映射任何嵌套对象。它们总是空的
我能试一试吗?衣冠楚楚。一开始,这让人觉得很痛苦,因为EF很容易嵌套东西。但一旦你克服了最初的痛苦,你就会意识到它是多么简单、可预测和以性能为导向。可能需要额外15分钟的查询处理,以获得不可触及的性能 我在这里回答了一个类似的问题
您应该能够返回多个数据集(一个用于父项,一个用于基础标记等),并将它们组合到应用层中 正如BlackjacketMack在他的回答中所说的,我认为多个数据集是最好的选择 您可能希望在Dapper文档中查看功能多映射以将单行拆分为多个对象,以及QueryMultiple以从单个查询中读取多个结果集 显然,这意味着修改您的查询以返回多个结果集,但可以实现您想要的结果集 示例如下: 特别是,您可能希望查看MultiMapTests.cs中的方法
public void testmultimapthethtypeswithgridreader()
。我发现这对于帮助我理解父集合与子集合的类似问题非常有用,因为子集合包含在一行中返回的不同对象类型
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();