首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实体框架中的聚合根支持

实体框架中的聚合根支持
EN

Stack Overflow用户
提问于 2012-06-15 15:23:51
回答 2查看 4.1K关注 0票数 13

我们如何才能告诉实体框架关于Aggregates

在保存聚合时,在删除聚合时保存聚合中的实体,删除aggregate

  • raise中的实体时,当两个不同的用户在加载聚合时试图修改同一聚集的

  • 中的两个不同实体时,将提供聚合的一致的实时视图,即使在访问聚合

中的所有实体之前存在一定的时间延迟。

(实体框架4.3.1代码优先)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-16 16:41:51

EF提供的功能允许您定义聚合并使用它们:

  1. ,这是最痛苦的部分。EF处理实体图。如果您有一个像发票这样的实体,并且这个实体有相关的InvoiceLine实体集合,那么您可以像聚合一样对待它。如果您在附加的场景中一切都按预期工作,但是在分离的场景中(要么聚合不是由EF加载的,要么是由不同的上下文实例加载的),则必须将聚合附加到上下文实例,并告诉它对象图中每个实体和独立关联的确切更改= set状态。
  2. 通过级联删除来处理--如果已经加载了相关实体,EF会删除它们,但如果没有,则必须对数据库中的关系进行级联删除。
  3. 是由数据库中的并发令牌处理的--最常见的是时间戳或行版本列。
  4. 必须在开始时使用急切加载和加载所有数据(=一致的观点),或者使用延迟加载,如果这样的话,由于延迟加载将加载当前关系状态,而在这种情况下,它将不会更新您已经加载的聚合的其他部分(如果您认为这是性能杀手的话)。尝试用EF实现这样的刷新。
票数 7
EN

Stack Overflow用户

发布于 2014-01-07 16:29:24

我专门为此目的编写了GraphDiff。它允许您通过提供流畅的映射来定义更新时的“聚合边界”。在需要来回传递独立实体图的情况下,我使用了它。

例如:

代码语言:javascript
复制
// Update method of repository
public void Update(Order order)
{
    context.UpdateGraph(order, map => map
        .OwnedCollection(p => p.OrderItems);
}

上面的内容将告诉Entity更新order实体,并合并OrderItems的集合。这种方式的映射允许我们确保实体框架只在我们在聚合上定义的范围内管理图形,而忽略了所有其他属性。它支持对所有实体进行乐观的并发检查。它处理更复杂的场景,还可以处理许多场景中的引用更新(通过AssociatedCollections)。

希望这是有用的。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11053660

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档