防止循环parent_ID“每个类型的表”与“每个层次结构的表”与“每个类的表”



我在实体框架中使用每个层次结构的表TPH,它基本上是扩展数据类型的常见核心属性的部分类。

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

的问题:我使用 int 来指代父 ID。表的 pK 键也是一个整数。

  1. 如何防止循环引用
  2. 设置时是否完成此检查
  3. 默认情况下,层次结构 ID 类型是否为我提供此功能?
  4. 每个类型的表与每个层次结构的表
  5. 与每个类的表有什么区别'

    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(和类继承(重用一个基类(。前三点是关于等级的;四是关于继承。

  1. 据我所知,EF 不直接支持您所说的样式的循环引用检查。不过,您可以自己做(对于SQL服务器,例如,通过使用CTE创建CHECK约束(

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

  3. EF 不直接支持层次结构 ID。您可以查看一些第三方库,该库添加了对层次结构id的支持。

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

一般来说,让学生和课程继承一件事似乎不是一个好主意;这些大多是无关的。您可以再创建一个条目,例如"AuditInfo",并在学生和课程类中添加对该条目的引用。可能更有意义。

最新更新