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

4
我正在使用一个利用继承的Entity Framework模型。我有一个基本类型的实体称为“用户”,以及两个从它继承的实体(“管理员”和“工人”)。这是模型: (来源: codetunnel.com) 问题在于,当我创建我的Entity Framework容器时,它没有工人或管理员的集合,只有用户。
EntityContainer context = new EntityContainer();
context.Users; // Exists.
context.Workers; // does not exist.

我如何获取工作人员/管理员的集合,而不仅仅是通用用户? 同样,如何为我的 FamilyAccount 实体添加指向管理员和工作人员的导航属性,而非通用用户?
提前感谢!
PS - 如果这很重要,我正在使用 table-per-type 模型进行继承。 OfType 似乎很有效。是否有其他方法可以添加只针对工作人员或管理员的导航属性?
3个回答

4

是的,这是EF的行为。 如果您想导航到Admin和Worker,可以按照以下步骤进行:

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

0

我并不是在批评,但当你点击模型上的“更新”按钮时会发生什么?你手动关联的内容会消失还是被保留下来? - Steve

-1

Table-per-Type(TPT)继承涉及将基类型的所有属性存储在单个表中。Table-per-Concrete Type(TPC)继承涉及将每种类型的数据存储在完全分离的表中,它们之间没有外键约束。

如果您想为管理员和工人使用单独的表,则应该使用TPC。


不,TPT涉及将所有类型存储在单独的表中。将所有内容存储在一个表中称为Table-Per-Heirarchy。我正在使用TPT,它们已经是单独的表了。用户、管理员和工人都有自己的表。TPC是一个边缘情况,与我的需求完全不同。 - Chev
不,TPT将所有公共数据成员存储在单个表中。所有唯一的数据成员都放在它们适当的类表中。TPH将所有数据成员放在一个表中,并使用鉴别器来查看它属于哪个子类。 - Alec
没错,这就是我刚才说的。TPC不是我需要的,因为它仅在存在重叠字段时使用,而我没有这种情况。我已经向您提供了描述每个选项的文章链接,如果您有任何否定我提供信息的信息,请向我提供链接。 - Chev
所以你希望你的表结构保持不变,但是你想直接从上下文中访问子类列表? - Alec
表结构很好。基类有一个表,继承类有自己的表。我只想找到一种方法,在特定类型的所有用户中添加导航属性。我在我给你链接的文章中找到了一种方法,现在将其发布为答案。 - Chev
是的,它扩展了实体。我本应该自己想到的,但没关系。 - Chev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接