我们正在创建一个EntityFramework CodeFirst数据访问层,用于访问一个“遗留”的数据库(这意味着我们大多数时候只能使用该数据库中存在的设计错误)。
领域模型(相当)简单:我们有抽象的Card,分为HomeCard、CarCard、OwnerCard和RenterCard。具体来说:
领域模型(相当)简单:我们有抽象的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也是如此。这不仅仅是为了美观,而且某些功能实现起来会更加容易(例如按名称搜索Owners和Renters,或者按所有者搜索Homes和Cards)。因此,我们希望我们的领域模型看起来像这样:
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确实有一个鉴别器字段,如果有帮助的话。