Отслеживаются ли дочерние объекты автоматически при добавлении в родительский объект? - PullRequest
4 голосов
/ 11 марта 2011

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

4 голосов
/ 11 марта 2011

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

...