Входящая аналогия.Обновление объекта после sproc и внутри транзакции
class Herd
{
public List<Animal> Animals { get; set; }
}
class Animal
{
//at least for today, animals have opinions
public List<Opinion> Opinions { get; set; }
}
class Opinion { }
Мы хотим сделать одноразовый переезд разных стад с востока на запад США. Мы создаем транзакцию для каждого стада, в котором мы движемся. В этой транзакции мы вызываем несколько хранимых процедур. Один из них добавляет некоторые мнения по умолчанию для животных. Позже в коде C# в той же транзакции мы добавляем мнения к животным, но они зависят от мнений по умолчанию.
using (var trans = _context.Database.BeginTransaction())
{
try
{
_context.Herds.Add(herd);
_context.SaveChanges();
Proc1Wrapper(herd);
Proc2Wrapper(herd);
Proc3Wrapper(herd);
InsertDefaultOpinionsProc(herd);
//this does not load the default opinions:
herd = _context.Herds.Where(o => o.HerdID == herd.ID).First();
//this does not either:
herd = _context.Herds.Find(herd.ID);
//this doesn't either:
_context.Entry(herd).Reload();
//this **does** load the default opinions
foreach (var animal in herd.Animals)
_context.Entry(animal).Collection("Opinions").Load();
//dependent on default opinions
AddOpinionsManually(herd);
_context.SaveChanges();
trans.Commit();
}
catch
{
trans.Rollback();
throw;
}
}
С кучей хранимых процедур, которые называются, я хотел бы, чтобы просто лечить все стадо, как грязный и перезагрузить объект стада, но я не могу найти способ сделать это. Что мне не хватает?
Аналогия, вероятно, была бы лучше с чем-то вроде «FavoritePlaces» или «FavoriteFoods» вместо «Opinions», так как более очевидно, что они зависят от местоположения. Ну что ж. –