Я видел множество вопросов и советов по многократному вызову dbContext.SaveChanges в транзакции. Некоторые говорят, что этого следует избегать. Этот подробный пост действительно стоит прочитать http://mehdi.me/ambient-dbcontext-in-ef6/
В моем конкретном сценарии объект B имеет ссылку Id на объект A.
Во время сценария создания я создаю A и вызываю savechanges, чтобы получить A.Id, назначенный базой данных. Затем я создаю Entity B как новый B(A.Id,....) и снова вызываю savechanges. Это могло бы выглядеть так в псевдокоде
using(var tx = dbContext.BeginTransaction())
{
var a = new A();
dbContext.Add(a); //a.Id is null
dbContext.saveChanges(); // a.Id has now been initialized
var b = new B(a.Id); //I want to create b in a valid state so a.Id cannot be null
dbContext.SaveChanges();
tx.Commit();
}
(Я знаю, что в псевдокоде отсутствует логика обработки исключений...)
Почему это проблема ? Это из-за того, что сохранения нельзя откатить?
Я знаю, что мог бы переделать, но это невозможно, потому что мы делим базу данных с некоторыми устаревшими системами, поэтому базу данных нельзя легко изменить, если это вообще возможно!
Что такое альтернативное решение?
SaveChanges
несколько раз, не означает, что это правильно. На самом деле, почему ваш код вызывает его дважды??. - person Panagiotis Kanavos   schedule 08.03.2016