要实现您想要的,您应该使用 Table-per-Type 层次结构。但是您的列 TType 不是必需的,因为 EF 通过外键链接匹配它。如何在 codefirst 方法中执行此操作,您可以在此处阅读。简而言之:您将基本类型映射到基本表,并将继承的类型映射到包含详细信息的链接表。
示例:您可以在数据库中创建三个表:
TransactionBases带有列TransId,以及所有交易的其他一些通用列;
ConcreteTransactionAs具有TransId作为主键和外键的列TransactionBase,以及其他特定于此事务类型列的列;
ConcreteTransactionBs具有TransId作为主键和外键的列TransactionBase,以及其他特定于此事务类型列的列;
然后在您的代码中创建三个实体类:
public class TransactionBase
{
[Key]
public Guid TransId {get;set;}
... //other common properties for all transaction types
}
[Table("ConcreteTransactionAs")]
public class ConcreteTransactionA: TransactionBase
{
...//specific to this transaction type columns
}
[Table("ConcreteTransactionBs")]
public class ConcreteTransactionB: TransactionBase
{
...//specific to this transaction type columns
}