背景:用户与 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();
一切都很酷,当我检查跟踪时,首先添加用户,然后添加用户设置 - 因为用户设置需要用户的IDENTITY。
但是当我更新那个“SpecialField”时:
var user = ctx.Users.Include("Settings").Single();
user.Name = "Joe";
user.Settings.SpecialField = "Bar";
ctx.SaveChanges();
我看到跟踪显示EF首先更新 UserSettings ,然后是用户。
为什么?
这对我来说非常重要,因为我的触发逻辑只有在 SpecialField 发生变化时才需要执行,并且需要引用用户上的数据。
任何人都可以解释这种行为吗?是否有一个解决方法(除了黑客 - 这将涉及我手动“再次触摸”特殊字段,这是非常糟糕的。)
答案 0 :(得分:1)
抱歉,我已经在我的电脑上试过你的模型了。一切都很顺利。 首先是用户更新(Parent),然后是UserSetting(Child)。
我认为,您的模型设置或数据库设置可能有问题,但我不知道是什么。
答案 1 :(得分:0)
再次结束“触摸”该领域作为解决方法。
该死的EF。