我的数据库中有一个查找表和一个数据表。我将使用性别和人物作为例子。假设性别表如下所示:
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;
然后它将正确保存,但由于性别为空而在最后一行失败。如果我然后打开一个新的上下文并加载保存的实体,那么最后一行就可以正常工作。有没有一种方法可以在保存后直接访问性别,就像我刚刚从数据库加载实体一样?
你的问题是当你使用new Person()
它只会创建一个 POCO 对象,它不知道如何获取它的Gender
财产。所以为了让延迟加载工作你需要proxies http://blogs.msdn.com/b/adonet/archive/2011/02/02/using-dbcontext-in-ef-feature-ctp5-part-8-working-with-proxies.aspx.
您可以将您的人创建为代理DbSet.Create() http://msdn.microsoft.com/en-us/library/gg696136%28v=vs.103%29.aspx:
var person = context.People.Create();
person.Name = "Bob";
person.GenderId = 1;
context.People.Add(person);
context.SaveChanges();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)