如何获得新创建的孩子的ID?

时间:2018-09-05 06:42:26

标签: entity-framework asp.net-core

获取父母的ID非常容易,如此处的回答:How can I get Id of inserted entity in Entity framework?

using (var context = new MyContext())
{
  context.MyEntities.AddObject(myNewObject);
  context.SaveChanges();

  int id = myNewObject.Id; // Yes it's here
}

但是,我问自己如何获得新创建的子实体(一对多)的ID,其中一个子对象已添加到子集合中,例如:

existingParent.Children.Add(newChild);


public int Save(Parent parent)
{
   context.Update(parent);
   context.SaveChanges();    
   return ???;
}

1 个答案:

答案 0 :(得分:0)

Save方法返回新创建的孩子的ID是不合理的。

对于您当前的代码,Save不是保存Children属性的唯一目的。让我们假设以下情况:

  1. 在不更改Parenet属性的情况下更新ChildrenSave的预期返回值是什么
  2. 通过添加多个新的Parenet更新Child,您的期望返回值是什么
  3. 通过删除Parenet更新Child,它将返回

您可以考虑在致电Id之后在public int Save(Parent parent)之外获得新的context.SaveChanges();

演示代码:

        var parent1 = _db.Parent.Include(p => p.Children).FirstOrDefault(p => p.Id == 1);
        var child3 = new Child { Name = "N3"};
        var child4 = new Child { Name = "N4" };
        parent1.Children.Add(child3);
        parent1.Children.Add(child4);

        _db.Update(parent1);
        _db.SaveChanges();
        var childId3 = child3.Id;
        var childId4 = child4.Id;