当用户表具有多个导航属性时,EF将更新哪个FK列
本文关键字:EF 更新 FK 属性 用户 导航 | 更新日期: 2023-09-27 18:01:01
场景
我有像这样的桌子
- 用户
(ID, Email, Password)
- 用户配置文件
(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(表的外键引用。
当您首先生成数据库DbContext时,您将获得两个要添加的集合(如果您有两个关系设置-每个键一个(。例如,您应该看到:
- us.User_Profile.Add((
- us.User_Profile2.Add((
然后将配置文件添加到两个集合中,以便在持久化时正确更新两个外键。实体框架会跟踪您向两个集合添加了相同对象引用的事实,并将其正确保存。
注意:另一种选择是保存用户,然后将获得的ID放回两个外键属性中,但这可能效率较低。