I am new to Entity Framework, but might be misunderstanding something, or doing something wrong.
My code, to get me a list of tasks for a particular person :
You should explicitly include references with the Include() method. It has two overloads: one takes the property as lambda expression, the other takes the path to load as a string (useful when you need to load references on objects available in collections).
MSDN reference
What you are looking for is .Include
you use it like this
var recordWithParentAttached = db.Tasks.Include(o => o.Person).Single(o => o.person_id == personId);
with .Include
your parents (or related records) will get attached and passed across while without they will be nulls
.
try this. What we are trying to do here is include the related entity in the select query itself, lazy load. So when you are unpacking the task you should be able to get the related entity aswell.
Things to check:
-- E.g. metadata file of the service you created.
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;}
}
the service file
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;
}
Hope it helps. Cheers