【问题标题】:Are child entities automatically tracked when added to a parent?子实体添加到父实体时是否会自动跟踪?
【发布时间】:2011-03-10 23:24:37
【问题描述】:

我想知道 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));
  }
}

【问题讨论】:

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


    【解决方案1】:

    是的,当您从上下文中获取 Order 并添加新的 OrderLine 时,DbContext 会将其插入到调用 SaveChanges 的数据库中。它还将跟踪加载的OrderLines 的所有更改。唯一的例外是删除现有的OrderLine。如果您的 OrderLine 仅具有 PK OrderLineIdOrder.OrderLines 中删除 OrderLine,则收集不会删除数据库中的 OrderLine,而是将其 OrderId 设置为空(=您的情况下的例外)。如果OrderLineIdOrderId 在您的OrderLine 实体中都是PK,从Order.OrderLines 中删除OrderLine 也会删除数据库中的OrderLine

    【讨论】:

    • @jessegavin:您对答案满意还是需要澄清?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-16
    • 1970-01-01
    • 2019-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多