繁体   English   中英

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

[英]Entity framework data context does not contain a collection of my entity that uses inheritance. Why?

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


(来源: codetunnel.com

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

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

如何获得工作人员/管理员的集合而不仅仅是普通用户? 同样,如何为我的FamilyAccount实体提供管理员和工人的导航属性,而不是普通用户?

提前致谢!

PS - 如果这很重要,我正在为我的 inheritance 使用每个类型的表model。

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

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

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

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

本文介绍如何扩展实体并自己添加导航属性。 滚动到“构建特定部门查询”header。 这就是我所追求的,消除了使用.OfType<Worker>()的要求。

现在我可以做familyAccount.Admins并且在附近一切都很好。

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

如果您想为 Admins 和 Workers 使用单独的表,那么您可能应该使用 TPC。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM