我在实体框架中使用每个层次结构的表TPH,它基本上是扩展数据类型的常见核心属性的部分类。
我有 2 个对象/类; Course
对象和与MyBaseCommonEntity
共享相同基本属性的Student
对象。目标是能够对任一对象执行Service/ticket
。我需要帮助对此进行建模,这是泛型类型还是继承类型?
的问题:我使用 int 来指代父 ID。表的 pK 键也是一个整数。
- 如何防止循环引用
- 设置时是否完成此检查
- 默认情况下,层次结构 ID 类型是否为我提供此功能? 每个类型的表与每个层次结构的表
与每个类的表有什么区别'
public partial class MyBaseCommonEntity { public int Id { get; set; } //Does it have any parents, does it belong to anyone public int? ParentId { get; set; } public string Name { get; set; } public string Description { get; set; } public System.DateTime CreatedDate { get; set; } public System.DateTime StartDate { get; set; } public System.DateTime? EndDate { get; set; } // Audit Stuff, whom, when why? public System.DateTime? AuditDate { get; set; } public string AuditUser { get; set; } public string AuditComments { get; set; } }
我认为你在这里混淆了两件事——层次结构支持(id/parentid(和类继承(重用一个基类(。前三点是关于等级的;四是关于继承。
-
据我所知,EF 不直接支持您所说的样式的循环引用检查。不过,您可以自己做(对于SQL服务器,例如,通过使用CTE创建CHECK约束(
-
由于 EF 不支持该形式的循环检查,因此根本不检查它。
-
EF 不直接支持层次结构 ID。您可以查看一些第三方库,该库添加了对层次结构id的支持。
-
这一点实际上不是关于父/子,而是关于如何在数据库中表示类继承。此处的相应知识库文章中介绍了您提到的所有选项:使用实体框架实现继承
一般来说,让学生和课程继承一件事似乎不是一个好主意;这些大多是无关的。您可以再创建一个条目,例如"AuditInfo",并在学生和课程类中添加对该条目的引用。可能更有意义。