我们使用Table Per Hierarchy(TPH)将继承的实体存储在EF6.1中(代码优先)。内部EF使用列Discriminator来保持实体的类型。
我可以使用OfType<>()
扩展程序检索特定的实体类型。我甚至可以使用is
运算符检查实体的类型。但我无法弄清楚如何检索实体类型本身。我们有几个实体的层次结构,我只需要检索几个属性(我不想加载整个实体),但还需要选择实体类型。目前的解决方案如下。这不是最理想的。有没有办法以更好的方式获得类型?
return DbSet.Where(o => o.Id == id)
.SelectMany(o => o.BaseTransactions
.Where(o => !(o is X00Transaction)))
.Select(o => new TransactionInfoDto
{
TransactionId = o.Id,
Amount = o.Amount,
TransactionType =
o is X01Transaction
? LoanDetailTransactionType.X01
: o is X02Transaction
? LoanDetailTransactionType.X02
: o is X03Transaction
? LoanDetailTransactionType.X03
: o is X04Transaction
? LoanDetailTransactionType.X04
: o is X05Transaction
? LoanDetailTransactionType.X05
: LoanDetailTransactionType.X06,
});