C# 使用TPH继承模型时如何在EntityFramework中获取实体类型
我们使用层次表(TPH)在EF6.1中存储继承的实体(代码优先)。EF内部使用列鉴别器来保持实体的类型 我可以使用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(
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获取类型这正是我所期待的,但我想问我是否错过了什么,或者有什么好把戏。。