Отслеживаются ли автоматически дочерние объекты при добавлении к родительскому?

Я хочу знать, будет ли 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));
  }
}

person jessegavin    schedule 10.03.2011    source источник


Ответы (1)


Да, когда вы получите Order из контекста и добавите новый OrderLine, DbContext вставит его в базу данных, вызвав SaveChanges. Он также будет отслеживать все изменения в загруженном файле OrderLines. Единственным исключением может быть удаление существующих OrderLine. Если ваш OrderLine имеет только PK OrderLineId удаление OrderLine из Order.OrderLines collectin не удалит OrderLine в базе данных, но вместо этого установит его OrderId в ноль (= исключение в вашем случае). Если и OrderLineId, и OrderId являются PK в вашей сущности OrderLine, удаление OrderLine из Order.OrderLines также удалит OrderLine в базе данных.

person Ladislav Mrnka    schedule 11.03.2011
comment
@jessegavin: Вы удовлетворены ответом или вам нужны какие-либо разъяснения? - person Ladislav Mrnka; 23.03.2011