gpt4 book ai didi

entity-framework - Entity Framework : Inheritance and Include

转载 作者:行者123 更新时间:2023-12-01 18:00:46 25 4
gpt4 key购买 nike

假设以下层次结构:

class Department { EntityCollection<Employee> Employees; }

class Employee { string Name; }

class RemoteEmployee : Employee { Country Location; EntityReference<Country> CountryReference; }

因此,部门包含员工列表。员工类型有层次结构,某些类型引用其他实体。假设我们需要为部门配备员工。好的,没问题:

dataContext.Departments.Include("Employees")

这将返回具体的员工类型(即远程员工的 RemoteEmployee 类型)。现在我们需要加载远程员工的位置。

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

我应该在“包含”中指定什么来使用 RemoteEmployee 加载位置?

最佳答案

我很确定 CatZ 的建议行不通。

我认为您不能使用 Include 来做到这一点,但您可以使用投影技巧来实现相同的效果,请参阅此 How to Sort Relationships in the Entity Framework

你需要做的是这样的:

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);
}

请注意,您不需要使用匿名类型来获取数据,本质上,由于 Entity Framework 的一项称为修复的功能,进行投影会产生填充您部门的集合的副作用。

希望这有帮助亚历克斯

关于entity-framework - Entity Framework : Inheritance and Include,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/944332/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com