使用实体框架从聚合根中删除子记录

Posted

技术标签:

【中文标题】使用实体框架从聚合根中删除子记录【英文标题】:Remove child records from aggregate root using entity framework 【发布时间】:2015-10-24 02:11:14 【问题描述】:

我的客户业务对象是地址集合的聚合根。

public class Customer 
  Public Customer Addresses = new List<Address>
  public virtual List<Address> Addresses  get; set; 
  // other properties


Public class Address 
  public virtual Customer customer get;set;
  [NotMapped]

  // other properties

我的上下文包含

public DBSet<Customer> Customers get;set;

但地址没有 DBSet,因为我希望客户成为聚合根。

但是当我使用

Customer.Addresses.RemoveAll(x=>x.TaggedToDelete)

Address 表中的 Customer_Id 设置为 null,而不是从数据库中删除 Address。

如何使用聚合根从数据库中删除地址?

我看过 How to remove child one to many related records in EF code first database?

但它使用 DBSet 作为子记录。

【问题讨论】:

【参考方案1】:
var deleteQueue = customer.Addresses.Where(x => x.TaggedToDelete).ToArray();
 foreach (var a in deleteQueue)
 
     var entry = connect.Entry(a);
     entry.State = EntityState.Deleted;
 

【讨论】:

以上是关于使用实体框架从聚合根中删除子记录的主要内容,如果未能解决你的问题,请参考以下文章

聚合根中覆盖的实体如何保存在 DDD 中?

从实体框架中删除一条记录?

在 JPA/Hibernate 中使用 @OnetoMany 的实体中不存在时从数据库中删除子记录(Spring 引导应用程序)

实体框架 - 有效地删除所有子实体而不加载它们

如何使用实体框架代码优先从数据库中删除所有相关实体

使用带有实体框架的动态字段按子记录排序