Как получить идентификатор нового созданного ребенка? - PullRequest
0 голосов
/ 05 сентября 2018

Получить ID родителя довольно просто, как ответили здесь: Как я могу получить Id вставленной сущности в Entity Framework?

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

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

Однако я спрашиваю себя, как я могу получить идентификатор вновь созданного дочернего объекта (один ко многим), где ребенок был добавлен в дочернюю коллекцию, например:

existingParent.Children.Add(newChild);


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

1 Ответ

0 голосов
/ 06 сентября 2018

Неразумно возвращать идентификатор нового созданного потомка в методе Save.

Для вашего текущего кода Save - не единственная цель сохранить Children свойство. Давайте предположим некоторый сценарий, как показано ниже:

  1. Обновление Parenet без изменения свойства Children, какое ожидаемое возвращаемое значение для Save
  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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...