[英]Entity Framework not loading related objects
我是实体框架的新手,但可能会误解某些事情或做错了什么。
我的代码,为我提供了特定人员的任务列表:
public List<TaskObject> GetAssignedTasks(int personId)
{
var items = (from s in _te.tasks where s.person.person_id == personId select s).ToList();
var tasks = new List<TaskObject>();
foreach (var t in items)
{
TaskObject tk = Transformer.UnpackTask(t);
tasks.Add(tk);
}
return tasks;
}
我的问题是,它似乎返回了记录列表,但是未加载相关项目。 我的“ Transformer.UnpackTask”方法采用我加载的任务实体,然后将其转换为另一个对象,该对象通过业务/服务层到达UI。
但是,一旦我的Unpacker函数尝试引用作为相关对象的项目(例如,一个任务具有一个“ AssignedPerson”,该对象具有一个包含人员详细信息的Person实体。但是我的实体的AssignedPerson属性为NULL。我认为它将加载相关项目。
我误会了吗
您应该使用Include()方法显式包括引用。 它有两个重载:一个将属性作为lambda表达式,另一个将路径作为字符串加载(在需要加载对集合中可用对象的引用时很有用)。
尝试这个。 我们在这里试图做的是在select查询本身中包含相关实体,即延迟加载。 因此,在解压缩任务时,您也应该能够获得相关实体。
检查事项:
-例如您创建的服务的元数据文件。
tasks metadata
{
...
...
\\these two should already be there you will just have to add the Include and
\\ Key attribute.
[Include]
public EntityCollection<Person> Person {get; set;}
[Key] \\ that connects the task and person entity (FK/PK)
public int PersonID {get;set;}
}
服务文件
public List<TaskObject> GetAssignedTasks(int personId)
{
var items = (from s in _te.tasks.Include("Person") where s.person.person_id == personId select s).ToList();
var tasks = new List<TaskObject>();
foreach (var t in items)
{
TaskObject tk = Transformer.UnpackTask(t);
tasks.Add(tk);
}
return tasks;
}
希望能帮助到你。 干杯
您正在寻找的是。 .Include
您这样使用它
var recordWithParentAttached = db.Tasks.Include(o => o.Person).Single(o => o.person_id == personId);
包含.Include
您的父母(或相关记录)将被附加并传递,如果没有,则为nulls
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.