添加到父级时是否会自动跟踪子实体?

时间:2011-03-10 23:24:38

标签: entity-framework-4 ef-code-first

我想知道EF CodeFirst是否会自动跟踪下面示例中的“子”对象。

var db = MyDataContext();
var order = db.Orders.Find(orderId);
order.AddOrderLine("Fancy Product");
db.Commit();

以下是我的(简化)域名实体

public class OrderLine {
  public Guid OrderLineId { get; private set; }
  public Guid OrderId { get; private set; }
  public string Description { get; private set; }

  public OrderLine(Guid orderId, string description) {
    OrderLineId = Guid.NewGuid();
    OrderId = orderId;
    Description = description;
  }
}

public class Order : Aggregate {
  public Guid OrderId { get; private set; }
  public ICollection<OrderLine> OrderLines { get; private set; }

  public void AddOrderLine(string description) {
    OrderLines.Add(new OrderLine(OrderId, description));
  }
}

1 个答案:

答案 0 :(得分:4)

是的,当您从上下文中获取Order并添加新的OrderLine时,DbContext会将其插入到调用SaveChanges的数据库中。它还会跟踪加载的OrderLines的所有更改。唯一的例外是删除现有的OrderLine。如果您的OrderLine只有PK OrderLineIdOrderLine中删除Order.OrderLines,则不会删除数据库中的OrderLine,而是会将其OrderId设置为OrderLineId null(在您的情况下为异常)。如果OrderId实体中的OrderLineOrderLine都是PK,则从Order.OrderLines删除OrderLine也会删除数据库中的{{1}}。