0

我在实体框架中使用 Table Per Hierarchy TPH,它基本上是扩展数据类型的公共核心属性的部分类。

我有 2 个对象/类;CourseObject 和一个与 .Student共享相同基本属性的 Object MyBaseCommonEntity。目标是能够Service/ticket对任一对象执行 a。我在建模时需要帮助,这是泛型类型还是继承类型?

我的问题:我使用 int 来引用 parentID。表的 pK Key 也是一个 int。

  1. 如何防止循环引用
  2. 设置时是否已完成此检查
  3. Hierarchy id 类型是否默认为我提供此功能?
  4. 每个类型的表与每个层次结构的表与每个类的表之间有什么区别`

    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; }
    }
    
4

1 回答 1

0

我认为您在这里混淆了两件事-层次结构支持(id / parentid)和类继承(重用一个基类)。前三点是关于等级的;四是关于继承。

  1. 据我所知,EF 不直接支持您所指的样式的循环参考检查。您可以自己做(例如,在 SQL 服务器的情况下,通过使用 CTE 创建 CHECK 约束)

  2. 由于 EF 不支持这种形式的循环检查,因此根本不检查。

  3. EF 不直接支持 HierarchyID。您可以查看一些第三方库,这些库添加了对 hierarchyid 的支持。

  4. 这一点实际上不是关于父/子,而是关于如何在数据库中表示类继承。您提到的所有选项都在此处的相应知识库文章中进行了说明:使用实体框架实现继承

一般来说,让 Student 和 Course 从一件事继承似乎不是一个好主意;这些大多是无关的。您可以再输入一个条目,例如“AuditInfo”,然后在 Student 和 Course 类中添加对它的引用。可能更有意义。

于 2015-11-02T07:15:43.677 回答