【问题标题】:Get property from latest child as calculated property in Entity Framework (EF)从最新子项获取属性作为实体框架 (EF) 中的计算属性
【发布时间】:2014-02-14 02:03:16
【问题描述】:

数据库背景:

-Parent
|- ChildCollection (with dates)
 |- ChildStatus (FK in Child object.  ChildStatus is a lookup value)

我在数据库关系的上下文中使用 child。继承在这里不是一个因素。

我想要的是,在我的父对象中,从数据库中获取最新日期并将其存储在子集合中,以及附加到该子对象的状态。最终目标是能够说出Parent.LastDate(作为DateTime 对象)和Parent.LastStatus(作为ChildStatus 对象)

我发现了一些关于如何处理父级中的计算字段或子级数量的帖子,但不是一种在不显式加载的情况下实际急切加载对孙实体的引用的方法子集合。

如果我只是将 Parent 作为我在 MVC 中的模型而不包括子实体,我希望这两个对象可供我使用。

我想更好的问题是“我应该怎么做?”这是我应该创建一个视图并在视图中填充其他属性的情况吗?我还没有使用视图,所以这可能是我对理想架构的简单误解......

【问题讨论】:

  • FK in parent 你的意思是你的FK在childCollection实体对象或者Parent对象中?
  • 不,我的意思是每个子对象都有一个指定其状态的 fk ChildStatusID。好问题。我不确定我是否可以说得不太清楚......

标签: c# entity-framework ef-code-first asp.net-mvc-5 entity-framework-6


【解决方案1】:

如果我理解正确,你的代码应该是这样的:

var latestChild = Parent.ChildCollection.OrderByDescending(c => c.Date).FirstOrDefault();

if(latestChild != null) 
{
    Parent.LastDate = latestChild.Date;
    Parent.LastStatus = latestChild.ChildStatus;
}

【讨论】:

  • 你理解正确。但我不确定如何以 EF 友好的方式将其绑定回父对象。
  • @Kendrick 你是什么意思?作为计算属性?
  • 本身没有计算,只是作为构建对象的一部分从数据库中检索。唯一的“计算”是找到具有最大日期的子对象。
  • @Kendrick 如果您的对象是 EF 自动生成的(又名模型优先),您可以使用扩展类(使用 partial)。与以下answer 非常相似,但使用查询而不是仅计算值。
  • 我首先从代码开始工作,但我认为这可能仍然是解决方案。有可能我只是没有给 EF 足够的信任,并期望这比实际情况更复杂。我会试一试,然后告诉你进展如何。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-20
  • 2014-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多