Azure 在禁用代理的情况下加载多级嵌套导航和集合属性
我很难弄清楚如何在禁用代理和延迟加载以序列化结果的情况下,使用交替收集和导航属性级别执行查询Azure 在禁用代理的情况下加载多级嵌套导航和集合属性,azure,entity-framework-6,linq-to-entities,azure-sql-database,Azure,Entity Framework 6,Linq To Entities,Azure Sql Database,我很难弄清楚如何在禁用代理和延迟加载以序列化结果的情况下,使用交替收集和导航属性级别执行查询 public ApplicationDbContext() : base("Debug") { this.Configuration.LazyLoadingEnabled = false; this.Configuration.ProxyCreationEnabled = false; } 实体如下
public ApplicationDbContext()
: base("Debug")
{
this.Configuration.LazyLoadingEnabled = false;
this.Configuration.ProxyCreationEnabled = false;
}
实体如下所示(省略非导航或非集合):
但是,我得到一个空的概念列表:
[{
"id": 324,
"conceptos": {
"concepto": []
}
},
{
"id": 340,
"conceptos": {
"concepto": []
}
}
}]
甚至像下面这样更简单的查询也会产生完全相同的结果:
comprobantes = _db.Comprobante
.Include(c => c.Conceptos.Concepto.Select(co => co.Impuestos));
当调试为空时检查对象时,我知道不是序列化:
我做错了什么?多亏了David comment,我才能够构建一个有效的查询:
如果需要大型图形,请尝试分别加载每个实体,并让DbContext修复导航属性。谢谢@DavidBrowne Microsoft的帮助。我看不出这有助于加载
concepto
列表。添加.Include(b=>b.Conceptos)
没有任何效果,因为Include(b=>b.Conceptos.Concepto….
已经这样做了。那么这个Concepto
如何列出呢?另外,foreach
循环中的语句没有做任何事情,因为它们只创建了暂时的IQueryable
而没有执行。@GertArnold我不能假装我知道EF内部工作的细节,但我基于根据David的建议,我猜这个解决方案通过将它们加载到上下文EF将自动修复关系。你是对的。Include(b=>b.Conceptos)。它没有效果。我正在删除它。
[{
"id": 324,
"conceptos": {
"concepto": []
}
},
{
"id": 340,
"conceptos": {
"concepto": []
}
}
}]
comprobantes = _db.Comprobante
.Include(c => c.Conceptos.Concepto.Select(co => co.Impuestos));
var comprobantes = _db.Comprobante
.Include(b => b.Conceptos.Concepto.Select(c => c.Impuestos.Retenciones.Retencion))
.Include(b => b.Conceptos.Concepto.Select(c => c.Impuestos.Traslados.Traslado));
foreach (var comprobante in comprobantes)
{
_db.ComprobanteTraslado.Where(t => t.ComprobanteId == comprobante.Id);
_db.ComprobanteRetencion.Where(r => r.ComprobanteId == comprobante.Id);
}