我在实体框架中使用Table Per Hierarchy TPH,它基本上是扩展数据类型的通用核心属性的部分类。
我有2个对象/类; Course
对象和Student
对象,它们与MyBaseCommonEntity
共享相同的基本属性。目标是能够在任一对象上执行Service/ticket
。我需要帮助进行建模,这是一个泛型类型还是继承类型?
我的问题:我使用int来引用parentID。表的pK键也是一个int。
每个类型的表与每个层次结构的表对每个类的表格有什么区别?
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; }
}
答案 0 :(得分:0)
我认为你在这里混淆了两件事 - 层次结构支持(id / parentid)和类继承(重用一个基类)。前三点是关于等级的;第四是关于继承。
据我所知,EF并不直接支持您所说风格的循环引用检查。你可以自己做(虽然在SQL服务器的情况下,通过CTE创建一个CHECK约束)
由于EF不支持该格式的循环检查,因此根本不会检查。
EF不直接支持HierarchyID。你可以看看some third-party library,它增加了对hierarchyid的支持。
这一点实际上不是关于父/子,而是关于如何在数据库中表示类继承。您提到的所有选项都在相应的知识库文章中进行了解释:Implementing Inheritance with the Entity Framework
一般来说,让学生和课程继承一件事似乎不是一个好主意;这些大多是无关的。你可以再做一次,比如" AuditInfo"并在Student和Course类中添加对它的引用。可能更有意义。