当Users表有多个导航属性时,EF会更新哪个FK列

时间:2016-08-06 05:13:08

标签: c# entity-framework ef-database-first

方案

我有像

这样的表格
  1. 用户(ID, Email, Password)
  2. User_Profile (ID, UserID_FK, First, Last, Created_On, Created_By_FK)
  3. 这是我创建新用户帐户的方式

    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
    

    User_Profile表 -

    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)表的外键引用。

1 个答案:

答案 0 :(得分:1)

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

  1. us.User_Profile.Add()
  2. us.User_Profile2.Add()
  3. 然后,您可以将配置文件添加到两个集合,以便在持久化时正确更新两个外键。实体框架会跟踪您已将相同对象引用添加到两个集合的事实,并将正确保存它。

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