在实体框架聚合根支持(Aggregate Root support in Entity Framew

2019-07-29 22:46发布

我们怎样才能知道实体框架大约聚集 ?

  1. 节能聚集时,保存聚合内实体
  2. 删除聚集时,聚集内删除实体
  3. 提高并发错误,当两个不同的用户尝试在同一aggreate中修改两个不同的实体
  4. 加载骨料时,提供集合的一致点即时观点即使有一定的时间延迟之前,我们访问了聚集内所有实体

(实体框架4.3.1代码优先)

Answer 1:

EF提供的功能,它允许您定义您的总量和使用它们:

  1. 这是最痛苦的部分。 EF可与实体图。 如果你有一个像发票的实体,该实体拥有相关InvoiceLine实体的集合,你可以像骨料接近它。 如果你在连接的情况一切正常,但在分离的场景(或者总不被EF加载或者它是由不同的上下文实例加载),则必须聚合重视上下文实例,并告诉它究竟是什么?你改变=设置状态在对象图中每个实体和独立相关性。
  2. 这是通过级联删除处理 - 如果您已加载实体相关的,EF将其删除,但如果你没有,你必须有级联对数据库中的关系配置删除。
  3. 这是通过并发标记数据库处理 - 最常见的两种时间戳或rowversion列。
  4. 您必须使用预先加载,并在一开始的所有数据一起加载(视野=一致点),或者你会使用延迟加载,在这种情况下,你不会有一致的观点,因为延迟加载会加载关系的当前状态,但它不会更新您已经加载骨料的其他部分(我认为这是性能杀手,如果你尝试实施这种清爽与EF)。


Answer 2:

我写GraphDiff专门用于这一目的。 它可以让你通过提供一个流畅的映射定义上更新的“聚合边界”。 在这里我需要通过分离的实体图形来回我都在的情况下使用它。

例如:

// Update method of repository
public void Update(Order order)
{
    context.UpdateGraph(order, map => map
        .OwnedCollection(p => p.OrderItems);
}

上面会告诉实体框架更新订单实体,也是合并的OrderItems的集合。 以这种方式映射使我们能够确保实体框架只管理我们定义的总的范围内的图形,而忽略所有其他属性。 它支持所有实体的乐观并发检查。 它可以处理更复杂的情况,也可以处理多对多的场景更新引用(通过AssociatedCollections)。

希望这可以使用的。



文章来源: Aggregate Root support in Entity Framework