实体框架数据上下文不包含我使用继承的实体的集合。为什么?

问题描述 投票:0回答:3

我正在使用带有实体框架的模型,该模型利用了继承。我有一个名为“User”的基本类型实体和两个从它继承的实体(“Admin”和“Worker”)。这是模型:

问题是,当我创建实体框架容器时,它上面没有工作人员或管理员的集合,只有用户。

EntityContainer context = new EntityContainer();
context.Users; // Exists.
context.Workers; // does not exist.

如何获得工作人员/管理员的集合,而不仅仅是普通用户?同样,我如何为我的

FamilyAccount
实体提供针对管理员和工作人员而不是一般用户的导航属性?

PS - 我正在使用 table-per-type 模型进行继承,如果这很重要的话。

.OfType
似乎效果很好。是否有另一种方法可以为工作人员或管理员实际添加导航属性?

c# entity-framework inheritance entity-framework-4 model
3个回答
4
投票

是的,这是EF的行为。 如果您想导航到 Admin 和 Worker,您可以执行以下操作:

var admins = context.Users.OfType<Admin>();
var workers = context.Users.OfType<Worker>();

0
投票

http://mosesofegypt.net/post/Inheritance-and-Associations-with-Entity-Framework-Part-3.aspx

本文介绍了如何扩展实体并自行添加导航属性。滚动到“构建特定部门查询”标题。这就是我所追求的,消除了使用

.OfType<Worker>()
的要求。

现在我可以做

familyAccount.Admins
,附近一切都很好。


-1
投票

按类型表 (TPT) 继承涉及将基本类型的所有属性存储在单个表中。每个具体类型表 (TPC) 继承涉及将每种类型的数据存储在完全独立的表中,它们之间没有外键约束。

如果您想为管理员和工作人员使用单独的表,那么您可能应该使用 TPC。

© www.soinside.com 2019 - 2024. All rights reserved.