#c# #entity-framework-core
#c# #сущность-фреймворк-ядро
Вопрос:
Возможно ли для Entity Framework Core устанавливать состояние объекта на Modified
при изменении значения в одном из его свойств? Я хотел бы знать это, потому что я переопределил Context.SaveChanges()
автоматическое обновление столбцов на основе состояния объекта.
Например, у меня есть следующие классы объектов:
public class Foo
{
public int Id { get; set; }
public int BarId { get; set; }
public Bar Bar { get; set; }
}
public class Bar
{
public int Id { get; set; }
public string Name { get; set; }
}
Возможно ли, что при изменении Bar.Name
путем доступа к нему из экземпляра Foo
, это Foo
будет иметь состояние объекта Modified
? Вот так:
var myFoo = context.Foos.FirstOrDefault(x => x.Id == 11);
myFoo.Bar.Name = "Test";
context.SaveChanges();
Когда я проверяю измененные объекты через ChangeTracker.Entries()
, я вижу, что Bar
они изменены, но не Foo
.
Комментарии:
1. Какие изменения в Foo вы ожидаете? Если и Foo, и Bar сопоставлены таблицам, я думаю, EF правильно распознает, что был обновлен только Bar… Я что-то упускаю?
2. @Val Да, в нашей схеме
Foo
иBar
сопоставлены с их собственными таблицами. В этом случае EF распознает, чтоBar
изменено, но я хочу знать, возможно ли также настроитьFoo
обновление, поскольку я хотел бы поразмышлять о базе данных, котораяFoo
была обновлена (например, установить время последнего изменения), посколькуBar
связанная с ней была обновлена.3. С точки зрения базы данных (т. Е. с точки зрения EF) изменения в двух таблицах не связаны, и нецелесообразно автоматически обновлять время последнего изменения в таблице, которая фактически не была изменена. Возможно, кто-то другой мог бы придумать лучшее решение, но я бы просто установил дату последнего изменения вручную в myFoo, когда myFoo.Bar.Name изменено…