Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 精巧的多级嵌套_C#_Dapper - Fatal编程技术网

C# 精巧的多级嵌套

C# 精巧的多级嵌套,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

我试图在我的项目中使用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;
我使用我的实体框架实体作为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();