我有一个抽象的父实体,有6个继承的子实体,在EF4中使用TPH。
是否有一种简单的方法来获取dicriminator列的值,请记住,虽然目前它与Type.Name相同,但情况并非如此。
在我的情况下,我将来自多个来源的数据导入到单个表中进行处理 - 所以光盘非常有用所以我只有一个表,我可以扩展到多个来源
我希望能够简单地遍历集合并获得鉴别器的价值 - 我本以为这应该是可行/合理的?
答案 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