我的数据库中有一个查找表和一个数据表。我将以性别和人为例。所以,让我们说性别表看起来像这样:
Id Code
1 Male
2 Female
并且人员表看起来像这样:
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;
然后它将正确保存但在最后一行失败,因为性别为空。如果我然后打开一个新的上下文并加载保存的实体,那么最后一行工作正常。有没有办法可以在保存后直接访问性别,就好像我刚刚从数据库中加载实体一样?
答案 0 :(得分:8)
您的问题是,当您使用new Person()
时,它只会创建一个POCO对象,该对象不知道如何获取它的Gender
属性。因此,要使延迟加载工作,您需要proxies。
您可以使用DbSet.Create()
创建您的个人代理var person = context.People.Create();
person.Name = "Bob";
person.GenderId = 1;
context.People.Add(person);
context.SaveChanges();