问题描述
|
背景:我和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; }
}
当我插入时:
var user = new User { Settings = new UserSettings { SpecialField = \"Foo\" }};
ctx.Users.Add(user);
ctx.SaveChanges();
一切都很酷,当我检查跟踪时,首先添加用户,然后添加UserSettings-正如您所期望的那样,因为UserSettings需要来自User的IDENTITY。
但是当我更新那个\“ SpecialField \”时:
var user = ctx.Users.Include(\"Settings\").Single();
user.Name = \"Joe\";
user.Settings.SpecialField = \"Bar\";
ctx.SaveChanges();
我看到跟踪显示EF首先更新了UserSettings,然后更新了User。
为什么?
这对我来说很重要,因为我的触发逻辑仅在更改SpecialField时才需要执行,并且它需要引用User上的数据。
谁能解释这种行为?是否有解决方法(黑客除外-会再次使我手动“接触”特殊字段,这确实很糟糕)。
解决方法
抱歉,但是我已经在PC上尝试了您的模型。一切都进行得很好。
首先更新用户(父),然后更新用户设置(子)。
我认为,您的模型设置或数据库设置可能有问题,但是我不知道是什么。
, 解决方法是再次“触摸”该字段。
该死的EF。