gpt4 book ai didi

c# - 使用 Include 方法加载 EntityFramework 中的相关对象

转载 作者:太空宇宙 更新时间:2023-11-03 14:05:30 25 4
gpt4 key购买 nike

下面是我的 Entity Framework 模型的一部分。你会注意到我有一个“标题”表,它与许多“AssetHolding”记录相关,它本身可以是 3 种类型之一 - 我使用继承 (TpH)。 请忽略所有 3 个继承类型看起来相同的事实 - 这是故意的

Entity model

编辑此数据时,我需要通过 Id 提取一个特定的 header ,以及所有关联的 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();
}

A specified Include path is not valid. The EntityType 'CoreValuationModel.AssetHolding' does not declare a navigation property with the name 'SwapAssetHoldingNotionals'.

这甚至可以使用 Include 方法吗? (即,不使用 LazyLoading)如果没有,有什么解决方法吗?

最佳答案

杰米,

[剧透] - 这是根据完整的内存编码的,可能根本无法编译!!

无论如何,我遇到过不得不将图表加载到几层深度的情况,并且似乎记得按照以下几行做了一些事情:

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

正如我所说,不要开枪(稍后会在我的“手机”上查看)

关于c# - 使用 Include 方法加载 EntityFramework 中的相关对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9412799/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com