2012-02-23 33 views
2

以下是我的实体框架模型的一部分。您会注意到我有一个“标题”表,它与许多“AssetHolding”记录有关,它本身可以是3种类型之一 - 对于这种记录我使用继承(TpH)。 请忽略一个事实,即所有3种遗传外观是相同的 - 这是故意使用包含方法在EntityFramework中加载相关对象

Entity model

当编辑这些数据,我需要拉凭身份证一个特定的报头,以及所有相关AssetHoldings。这样做的方法如下所示:

public AssetValuationHeader GetValuationHeaderById(int id) 
{ 
    return this.AssetValuationHeaders 
     .Include("AssetHoldings") 
     .Where(vh => vh.Id == id) 
     .FirstOrDefault(); 
} 

这会正确加载上图中用红色边框突出显示的所有内容。

im问题是我需要加载在上面的图像中用绿色边框突出显示的位。正如你所看到的,这只与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

由于实体继承,它不起作用。见http://stackoverflow.com/questions/944332/entity-framework-inheritance-and-include – ken2k 2012-02-23 12:35:09

回答

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(); 
} 

正如我所说,不要拍摄使者(稍后会从我的'手机'中查看此内容)

相关问题