Самоотслеживающие сущности. Потрясающий.
За исключением случаев, когда вы делаете что-то вроде
return Db.Users;
ни одна из самоотслеживающих сущностей не отслеживается (пока, возможно, они не будут десериализованы).
Отлично. Таким образом, мы должны признать, что существует вероятность того, что объект, возвращающийся к нам, не имеет включенного отслеживания.
Что теперь???
Вещи, которые я пробовал
Для данного тела метода:
using (var db = new Database())
{
if (update.ChangeTracker.ChangeTrackingEnabled)
db.Configurations.ApplyChanges(update);
else
FigureItOut(update, db);
db.SaveChanges();
update.AcceptChanges();
}
Все следующие реализации FigureItOut
терпят неудачу:
db.Configurations.Attach(update);
db.DetectChanges();
Ни
db.Configurations.Attach(update);
db.Configurations.ApplyCurrentValues(update);
Ни
db.Configurations.Attach(update);
db.Configurations.ApplyOriginalValues(update);
Ни
db.Configurations.Attach(update);
db.Configurations.ApplyChanges(update
Ни о чем другом, что я могу придумать, кроме как
- Получение исходной сущности из базы данных
- Сравнение каждого свойства вручную
- Обновление свойств по мере необходимости
Что именно я должен делать с объектами самоотслеживания, которые сами себя не отслеживают??
Небольшое обновление:
Слепая маркировка объекта как измененного работает, однако это кажется немного вонючим. Это лучшее, что мы можем сделать в этом случае?