RPM*_*984 5 c# sql-server entity-framework sql-update entity-framework-4.1
背景:我在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; }
}
Run Code Online (Sandbox Code Playgroud)
当我做INSERT时:
var user = new User { Settings = new UserSettings { SpecialField = "Foo" }};
ctx.Users.Add(user);
ctx.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
一切都很酷,当我检查跟踪时,首先添加用户,然后添加UserSettings - 正如您所期望的那样,因为UserSettings需要来自User的IDENTITY .
但是,当我更新 "SpecialField"时:
var user = ctx.Users.Include("Settings").Single();
user.Name = "Joe";
user.Settings.SpecialField = "Bar";
ctx.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
我看到跟踪显示EF 首先更新UserSettings,然后是User.
为什么?
这对我来说很重要,因为我有触发逻辑,只有在更改了SpecialField时才需要执行,并且需要在User上引用数据.
谁能解释这种行为?是否有一个解决方法(除了黑客 - 这将涉及我手动"再次触摸"特殊领域,这是非常糟糕的).