【发布时间】:2015-02-21 18:55:57
【问题描述】:
我在实体框架中使用逐层表 (TPH) 继承。现在我正在寻找一个列表——在这个例子中——部门可以是一个子类型。我希望集合中的项目包含它们自己的自定义属性,而不仅仅是基本模型的属性。
我怎样才能做到这一点?
public class Department
{
public Department()
{
DepartmentType = this.GetType.Name;
}
public int Id {get; set;}
public string DepartmentType {get; set;}
}
public class Finance : Department
{
public virtual Manager Manager {get; set;}
}
public class Sports : Department
{
public virtual Coach Coach {get; set;}
}
// This obviously crashes instantly
// How can I include Manager if type is Finance and Coach if type is Sports?
context.Departments
.Include(c => (c is Finance) ? c.Manager : null)
.Include(c => (c is Sports) ? c.Coach : null);
我什至尝试返回 IEnumerable<object> 并为每个子类型添加一个多态方法,如下所示:
public class Sports : Department
{
public Coach Coach {get; set;}
public object Export()
{
return new
{
this.Id,
this.DepartmentType,
this.Coach
}
}
}
然后做这样的事情:
context.Departments.Select(c => c.Export())
但这也不起作用。
所需的 JSON 用法
[
{ Id: 1, DepartmentType: "Finance", Manager: { Name: "John" } },
{ Id: 2, DepartmentType: "Finance", Manager: { Name: "Harold" } },
{ Id: 3, DepartmentType: "Sport", Coach: { Name: "Fred", SportType: "Soccer" } },
{ Id: 4, DepartmentType: "Finance", Manager: { Name: "Hank" } },
{ Id: 5, DepartmentType: "Sport", Coach: { Name: "Mark", SportType: "Football" } }
]
【问题讨论】:
-
您希望只能自动导出还是需要导入?
-
它纯粹是为了在 Angular 前端中显示
-
然后而不是
public object Export()创建一个public string NicePrint()或重载 ToString() -
主要问题是子类型导航属性没有急切加载,我只得到基本类型属性
-
这个链接可以帮到你:weblogs.asp.net/manavi/…
标签: c# json linq inheritance