我正在使用带有实体框架的模型,该模型利用了继承。我有一个名为“User”的基本类型实体和两个从它继承的实体(“Admin”和“Worker”)。这是模型:
问题是,当我创建实体框架容器时,它上面没有工作人员或管理员的集合,只有用户。
EntityContainer context = new EntityContainer();
context.Users; // Exists.
context.Workers; // does not exist.
如何获得工作人员/管理员的集合,而不仅仅是普通用户?同样,我如何为我的
FamilyAccount
实体提供针对管理员和工作人员而不是一般用户的导航属性?
PS - 我正在使用 table-per-type 模型进行继承,如果这很重要的话。
.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
本文介绍了如何扩展实体并自行添加导航属性。滚动到“构建特定部门查询”标题。这就是我所追求的,消除了使用
.OfType<Worker>()
的要求。
现在我可以做
familyAccount.Admins
,附近一切都很好。
按类型表 (TPT) 继承涉及将基本类型的所有属性存储在单个表中。每个具体类型表 (TPC) 继承涉及将每种类型的数据存储在完全独立的表中,它们之间没有外键约束。
如果您想为管理员和工作人员使用单独的表,那么您可能应该使用 TPC。