Фон: У меня есть отношения 1 до 0..1 между Пользователь и Пользовательские настройки .
Важная часть модели выглядит следующим образом:
public class User
{
public int UserId { get; set; }
public string Name { get; set; }
public UserSettings Settings { get; set; }
}
public class UserSettings
{
public int UserId { get; set; } // PK/FK
public sting SpecialField { get; set; }
}
Когда я делаю INSERT :
var user = new User { Settings = new UserSettings { SpecialField = "Foo" }};
ctx.Users.Add(user);
ctx.SaveChanges();
Все круто, когда я проверяю трассировку, сначала добавляется Пользователь , затем UserSettings - как и следовало ожидать, поскольку UserSettings нужна IDENTITY от пользователя .
Но когда я ОБНОВЛЕН , то "SpecialField":
var user = ctx.Users.Include("Settings").Single();
user.Name = "Joe";
user.Settings.SpecialField = "Bar";
ctx.SaveChanges();
Я вижу, что трассировка показывает, что EF сначала обновляет UserSettings , затем User .
Почему?
Это важно для меня, потому что у меня есть логика триггера, которая должна выполняться только при изменении SpecialField , и она должна ссылаться на данные Пользователь .
Кто-нибудь может объяснить это поведение? Есть ли обходной путь (кроме взлома - который потребовал бы, чтобы я снова вручную «прикоснулся» к специальному полю, что действительно плохо).