如何从EF4中的TPH集合中获取辨别器的值?

时间:2011-10-26 06:14:57

标签: c# entity-framework-4

我有一个抽象的父实体,有6个继承的子实体,在EF4中使用TPH。

是否有一种简单的方法来获取dicriminator列的值,请记住,虽然目前它与Type.Name相同,但情况并非如此。

在我的情况下,我将来自多个来源的数据导入到单个表中进行处理 - 所以光盘非常有用所以我只有一个表,我可以扩展到多个来源

我希望能够简单地遍历集合并获得鉴别器的价值 - 我本以为这应该是可行/合理的?

2 个答案:

答案 0 :(得分:1)

Discriminator列由实体类型表示,因此您可以使用:

foreach (var entity in context.MyTPHEntities.OfType<SubtypeA>())
{
    ...
} 

获取TPH层次结构中的所有SubtypeA实例或

foreach (var entity in context.MyTPHEntities)
{
    if (entity is SubtypeA)
    { 
        ...
    }
    ...
} 

使用所有实体及其类型=鉴别器值。

无法将Discriminator映射为属性,因此如果不深入MetadataWorkspace并在运行时遍历映射,则无法直接获取其值 - 这需要花费一些时间在调试器中查找检索映射值的方法。您仍然无法在LINQ查询中使用discriminator列或通过EF插入新实体。它只对本机SQL访问有用。

答案 1 :(得分:0)

如果你想通过你的表循环并只读取鉴别器列,你可以使用EntityReader来做到这一点。

查看以下信息:How to: Execute a query