entity framework代码首先不保存后延迟加载

我的数据库中有一个查找表和一个数据表。 我将以性别和人为例。 所以,让我们说性别表看起来像这样:

Id Code 1 Male 2 Female 

而person表看起来像这样:

 Id Name GenderId 1 Bob 1 2 Jane 2 

我首先在EF代码中建模了两个表,如下所示:

 public class Gender { public int Id {get;set;} public string Code {get;set;} } public class Person { public int Id {get;set;} public string Name {get;set;} public int GenderId {get;set;} public virtual Gender {get;set;} } 

如果我读了一个已经在数据库中的人,那么我可以访问person.Gender.Code没有问题。 如果我这样做:

 var person = new Person { Name = "Bob", GenderId = 1, }; context.People.Add(person); context.SaveChanges(); var code = person.Gender.Code; 

然后它将正确保存,但在最后一行失败,因为性别为空。 如果我然后打开一个新的上下文并加载保存的实体,那么最后一行工作正常。 是否有一种方法可以在保存后直接访问性别,就像我刚从数据库中加载实体一样?

您的问题是,当您使用new Person()它只会创建一个POCO对象,该对象不知道如何获取它的Gender属性。 因此,要使延迟加载工作,您需要代理 。

您可以使用DbSet.Create()将您的人员创建为代理:

 var person = context.People.Create(); person.Name = "Bob"; person.GenderId = 1; context.People.Add(person); context.SaveChanges();