C# 使用TPH继承模型时如何在EntityFramework中获取实体类型

C# 使用TPH继承模型时如何在EntityFramework中获取实体类型,c#,entity-framework,entity-framework-6,C#,Entity Framework,Entity Framework 6,我们使用层次表(TPH)在EF6.1中存储继承的实体(代码优先)。EF内部使用列鉴别器来保持实体的类型 我可以使用OfType()扩展来检索特定的实体类型。我甚至可以使用is操作符检查实体的类型。但我不知道如何检索实体类型本身。我们有几个实体的层次结构,我只需要检索几个属性(我不想加载整个实体),但还需要选择实体类型。当前的解决方案如下所示。这是次优的。有没有一种方法可以更好地获得字体 return DbSet.Where(o => o.Id == id) .SelectMany(

我们使用层次表(TPH)在EF6.1中存储继承的实体(代码优先)。EF内部使用列鉴别器来保持实体的类型

我可以使用
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,
    });

我也遇到了同样的问题,并被迫在实体中保存
LoandDetailTransactionType
。您还可以具体化查询,然后执行附加的
Select
(使用Linq to Objects),使用
typeof(x)
@haim770填充
TransactionType
,感谢您的响应-1)将附加列存储为解决方法,2)因为我不选择实体(只有少数列)我无法使用
typeof
获取其类型。不管怎样,这是否意味着无法使用EF获取类型这正是我所期待的,但我想问我是否错过了什么,或者有什么好把戏。。