如何从EF4的TPH集合中获得鉴别符的值

本文关键字:鉴别 集合 EF4 TPH | 更新日期: 2023-09-27 18:12:20

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

是否有一种简单的方法来获取鉴别列的值,请记住,虽然目前它与类型相同。名称,不必如此

在我的例子中,我从许多数据源导入数据到一个表中进行处理-所以磁盘非常有用,所以我只有一个表,我可以扩展到多个数据源。

我希望能够简单地循环遍历集合并获得鉴别器的值-我认为这应该是可能的/明智的?

如何从EF4的TPH集合中获得鉴别符的值

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

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

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

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

处理所有实体和它们的type = discriminator值

Discriminator不能映射为属性,所以如果不深入MetadataWorkspace并在运行时遍历映射,就不能直接获得它的值——这将需要在调试器中花费一些时间来找到检索映射值的方法。但是,您将无法在LINQ查询或通过EF插入新实体时使用鉴别符列。它只能用于本地SQL访问。

如果你想循环遍历你的表,只读取discriminator列,你可以使用EntityReader来做到这一点。

查看以下信息:如何:执行查询