6

我的数据库中有一个查找表和一个数据表。我将以性别和人物为例。假设性别表如下所示:

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;

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

4

1 回答 1

11

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

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

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

context.People.Add(person);
context.SaveChanges();
于 2012-06-14T06:36:42.017 回答