Настройка состояния объекта при изменении сложных свойств

#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 изменено…