我想知道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));
}
}
答案 0 :(得分:4)
是的,当您从上下文中获取Order
并添加新的OrderLine
时,DbContext
会将其插入到调用SaveChanges
的数据库中。它还会跟踪加载的OrderLines
的所有更改。唯一的例外是删除现有的OrderLine
。如果您的OrderLine
只有PK OrderLineId
从OrderLine
中删除Order.OrderLines
,则不会删除数据库中的OrderLine
,而是会将其OrderId
设置为OrderLineId
null(在您的情况下为异常)。如果OrderId
实体中的OrderLine
和OrderLine
都是PK,则从Order.OrderLines
删除OrderLine
也会删除数据库中的{{1}}。