【发布时间】:2021-05-05 09:25:52
【问题描述】:
我有以下继承。医生是父类。医生可以是儿科医生、牙医或骨科医师。每种医生类型都有不同的属性(不同的领域逻辑),但他们都共享相同的 ID、姓名,而且他们都可以有很多预约。
public abstract class Doctor
{
public long Id { get; set; }
public string Name { get; set; }
}
public class Paediatrician : Doctor
{
// add some other properties specific only to Paediatrician.
}
public class Orthopaedic : Doctor
{
// add some other properties specific only to Orthopaedic.
}
public class Dentist : Doctor
{
// add some other properties specific only to Dentist.
}
public class Appointment
{
public long Id { get; set; }
public DateTime DateOfAppointment { get; set; }
}
public class Country
{
public long Id { get; set; }
public string Name { get; set; }
}
这里有一对多的关系(医生可以有很多预约)。这里的问题是我在哪里添加约会关系?在每个子类内部还是在父类上?我必须将此关系设置为我的 ORM,因此将这种关系添加到每个子类中会在我的数据库中产生三种不同的关系,而如果我将它添加到父类中只有一个?同样代表国家表。我在哪里添加国家关系?仅在父类或子类上?
可能会影响我的选择的系统要求之一是我必须显示一个包含医生姓名和预约日期的列表视图。所以有两种方法可以做到这一点。如果我将约会关系添加到父类,则可以通过调用每个子类并聚合结果,或者直接调用父类并获取约会。我被卡住了,根本不知道这样做的正确方法是什么。
【问题讨论】:
-
stackoverflow 上的段落是免费的
-
这不是一个真正的编程问题,而是一个关系数据库问题。但是,inheritance is described in the Microsoft docs。 (近年来,Microsoft 文档已经变得相当好(与过去相比)。)我认为如果有多个导数,则每个层次结构的表会变得相当大。 Table-per-type 似乎更合乎逻辑,尽管有一个额外的间接级别,性能较差(见页面底部评论)。
-
@JHBonarius 但即使在 TPT 中,在哪里添加了共同关系?在父类或子类中。 EF Core 的文档没有说明这样的场景(大多数示例通常都显示非常简单的示例),给更复杂的场景留下了很大的问号
-
稍后我会改进我的答案。但据我所知,约会清单应该在基础上。为什么不呢?就像 id 和 name 很常见一样......为什么常见的列表会不同?
-
如果在基类中可以直接查询基类吗?继承的目的不就是隐藏基类,只处理子类吗?
标签: c# .net inheritance entity-framework-core