实体框架UPDATE操作-为什么先更新子记录?

问题描述

| 背景:我和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。     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...