Assume the following hierarchy:
class Department { EntityCollection<Employee> Employees; }
class Employee { string Name; }
class RemoteEmployee : Employee { Country Location; EntityReference<Country> CountryReference; }
So, department contains a list of employees. There is a hierarchy of employee types, some types reference other entities. Let's suppose we need to load department with its employees. OK, not a problem:
dataContext.Departments.Include("Employees")
This returns concrete employee types (i.e. RemoteEmployee for Remote ones). Now we need to load Location with Remote employees.
dataContext.Departments.Include("Employees").Include("Employees.Location") - Error: no such property in Employee
dataContext.Departments.Include("Employees").Include("RemoteEmployees.Location") - Error: no such property in Department
What should I specify in Include to load Location with RemoteEmployee?
I'm pretty sure what CatZ suggests doesn't work.
I don't think you can do this using Include, but you can achieve the same effect using a projection trick see this How to Sort Relationships in the Entity Framework
What you need to do is something like this:
var results = from d in ctx.Departments
select new {
d,
employees = d.Employees.Select(
e => new {
e,
location = e is RemoteEmployee ?
(e as RemoteEmployee).Location :
null
}
)
};
foreach (var result in results)
{
var re = result.d.Employees.First() as RemoteEmployee;
Console.WriteLine("{0} {1} works from {2}",
re.Firstname, re.Surname, re.Location.Name);
}
Notice that you don't need to use the anonymous types to get the data, essentially doing the projection has a side-effect of filling the collections on you department because of a feature of the Entity Framework called fixup.
Hope this helps Alex
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With