背景:我有一个User和UserSettings之间的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();
当我检查追踪记录时,一切都很顺利,首先添加了User,然后是UserSettings - 正如您所预期的,因为UserSettings需要从User获取IDENTITY。
但是当我UPDATE那个“SpecialField”时:
var user = ctx.Users.Include("Settings").Single();
user.Name = "Joe";
user.Settings.SpecialField = "Bar";
ctx.SaveChanges();
我看到跟踪记录显示EF先更新UserSettings,然后是User。
为什么会这样呢?
这对我很重要,因为我有触发器逻辑需要仅在SpecialField更改时执行,并且它需要引用User上的数据。
有人能解释这种行为吗?是否有解决方法(除了hack - 这将涉及我手动再次“触摸”特殊字段,这真的很糟糕)。