我们正在遗留数据库上制作 EntityFramework CodeFirst DAL (这意味着我们大多会遇到它所存在的任何设计错误)。
领域模型(非常)简单:我们有抽象 Card,子类型为 HomeCard、CarCard、OwnerCard 和 RenterCard。准确地说:
abstract class Card {}
class HomeCard: Card {}
class CarCard: Card {}
class OwnerCard: Card {}
class RenterCard: Card {}
数据库模型紧随其后的是表 Cards、Homes、Cars、Owners 和 Renters,其中 Cards 包含公共列,而其他表包含与特定类有关的列。这正是 TPT 的含义,它完美地映射到 EntityFramework。
重构之后,我们发现(不出所料)Home 和 Car 确实共享一些属性,并且 Owner 和 Renter 也这样做。而且它不仅是为了美观,而且一些功能会更容易实现(例如按名称搜索所有者和租户,或按所有者搜索房屋和卡片)。所以我们希望我们的领域模型看起来像这样:
abstract class Card {}
abstract class ProperyCard: Card {}
class HomeCard: ProperyCard {}
class CarCard: ProperyCard {}
abstract class PersonCard: Card {}
class OwnerCard: PersonCard {}
class RenterCard: PersonCard {}
但是我们仍然有相同的数据库模型,这意味着我们在 TPT 和 TPC 之间有一些奇怪的混合。我们通过 EF/CodeFirst 映射它的所有尝试都失败了。关于使它工作的任何建议?
PS我们的基表 Cards 确实有一个鉴别器字段,如果这可能有帮助的话。