通过外键更新一对一关系

本文关键字:一对一 关系 更新 | 更新日期: 2023-09-27 18:01:57

我有一个使用EF CodeFirst方法的小应用程序。模型上的一个与另一个有一对一的关系。下面是一个例子

public class Customer 
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id {get; set;}
    public string Name {get; set;}
    public int PersonInfoId {get; set;}
    public virtual Person PersonInfo {get; set;}
}
public class Person 
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id {get; set;}
    public string Name {get; set;}
    //Some other properties
}

我创建了一个新的Customer,并将ParentId设置为现有的

Customer superCustomer = new Customer();
superCustomer.PersonInfoId = 21;
customersContext.Customers.Add(superCustomer);

当我尝试选择这个客户时,我得到了所有数据,但导航属性为空。

var c = customersContext.Customers.Where(x => x.Id == 1).FirstOrDefault(x=>x);
c.Person //is null :(

但是如果我重新启动应用程序,然后选择这个特定的客户,那么导航属性将像EF中通常那样被动态代理填充。看起来EF在重新创建上下文之前不会检索导航属性。有办法解决这个问题吗?

通过外键更新一对一关系

尝试以下操作:

var c = customersContext.Customers.Inclue(x=>x.PersonInfo).Where(x => x.Id == 1).FirstOrDefault(x=>x);