以下是我的实体框架模型的一部分。您会注意到我有一个“标题”表,它与许多“AssetHolding”记录有关,这些记录本身可以是3种类型之一 - 我使用继承(TpH)。 请忽略所有3种继承类型看起来相同的事实 - 这是故意的
编辑此数据时,我需要通过Id和所有相关的AssetHoldings拉出一个特定的标题。这样做的方法如下:
public AssetValuationHeader GetValuationHeaderById(int id)
{
return this.AssetValuationHeaders
.Include("AssetHoldings")
.Where(vh => vh.Id == id)
.FirstOrDefault();
}
这样可以正确加载上图中红色边框突出显示的所有内容。
我遇到的问题是我还需要在上图中加载以绿色边框突出显示的位。正如您所看到的,这只与3个继承表中的一个相关。
我试过了:
public AssetValuationHeader GetValuationHeaderById(int id)
{
return this.AssetValuationHeaders
.Include("AssetHoldings")
.Include("AssetHoldings.SwapAssetHoldingNotionals")
.Where(vh => vh.Id == id)
.FirstOrDefault();
}
指定的包含路径无效。 EntityType 'CoreValuationModel.AssetHolding'未声明导航 名为'SwapAssetHoldingNotionals'的属性。
使用Include
方法甚至可以实现这一点吗? (即,不使用LazyLoading)任何解决方法,如果没有?
答案 0 :(得分:1)
杰米
[剧透] - 这是从完整内存编码的,可能根本不会编译!!
无论如何,我已经遇到过这样的情况:我必须加载几层深度的图表,并且似乎记得按照以下几点做了一些事情:
public AssetValuationHeader GetValuationHeaderById(int id)
{
return this.AssetValuationHeaders
.Include("AssetHoldings")
.Include("AssetHoldings").Select(sa => sa.SwapAssetHoldingNotionals)
.Where(vh => vh.Id == id)
.FirstOrDefault();
}
或:
public AssetValuationHeader GetValuationHeaderById(int id)
{
return this.AssetValuationHeaders
.Include("AssetHoldings")
.Include("AssetHoldings").Include("SwapAssetHoldingNotionals")
.Where(vh => vh.Id == id)
.FirstOrDefault();
}
正如我所说的那样,不要拍摄信使(这将远离我的电话'电话'稍后)