当用户表具有多个导航属性时,EF将更新哪个FK列

本文关键字:EF 更新 FK 属性 用户 导航 | 更新日期: 2023-09-27 18:01:01

场景

我有像这样的桌子

  1. 用户(ID, Email, Password)
  2. 用户配置文件(ID, UserID_FK, First, Last, Created_On, Created_By_FK)

这就是我创建新用户帐户的方式

Users us = new Users 
{ 
    Email = 'xyz@example.com', 
    Password = 123 
};
User_Profile up = new User_Profile 
{
    First = 'Kamalpreet',
    Last = 'Singh',
    Created_On = DateTime.Now
};
us.User_Profile.Add(up);
Context x = new Context();
x.Users.Add(us);
db.Save();

以上代码在数据库中创建以下记录-

用户表-

ID = 100
Email = xyz@example.com
Password = 123

用户配置文件表-

ID = 1
UserID_FK = 100
First = Kamalpreet
Last = Singh
Created_On = 2016-08-06 10:40:10.000
Created_By_FK = NULL

问题

在User_Profile表中,为什么Users(ID)只复制到User_Profile(UserID_FK)表而不复制到User_Profile(Created_By_FK)

UserID_FK和Created_By_FK列都是对用户(ID(表的外键引用。

当用户表具有多个导航属性时,EF将更新哪个FK列

当您首先生成数据库DbContext时,您将获得两个要添加的集合(如果您有两个关系设置-每个键一个(。例如,您应该看到:

  1. us.User_Profile.Add((
  2. us.User_Profile2.Add((

然后将配置文件添加到两个集合中,以便在持久化时正确更新两个外键。实体框架会跟踪您向两个集合添加了相同对象引用的事实,并将其正确保存。

注意:另一种选择是保存用户,然后将获得的ID放回两个外键属性中,但这可能效率较低。