【问题标题】:Entity Framework - Get derived types when querying base by primary key?实体框架 - 通过主键查询基时获取派生类型?
【发布时间】:2014-01-13 21:03:29
【问题描述】:

我已经阅读了很多关于此的文章,但没有找到明确的答案。这是我想做的:

我有一个基础实体 (baseEntity) 和两个继承实体 (House) 和 (Lizard)。我有另一个实体 (myEntity) 以及基本实体和 myEntity 之间的关联,其中 myEntity 上有一个导航属性可以返回到基本实体。我想要做的就是以某种方式获取导航属性指向的派生实体类型的对象。例如,如果我遵循我想要的这条路径:myEntity > 导航属性“baseEntity” > 获取 House 或 Lizard,具体取决于主键存在于哪一个,因为这两种实体类型共享一个实际存在于 baseEntity 中的主键值。

为了清楚起见 - 我知道它可以告诉派生类的类型,因为当我从查找操作或导航属性返回 baseEntity 的对象时,我可以查看调用 .GetType()那个对象,它会说 Lizard_C4BDJSNBI498348FHDJ..... 或 House.... 等等。如果我对该对象执行 .GetType().BaseType ,它将直接说 ModelNamespace.Lizard 或 ModelNamespace.House。

有什么想法吗?

这里有人吗?

【问题讨论】:

    标签: entity-framework


    【解决方案1】:
    var house = myEntity.baseEntity as House;
    var lizard = myEntity.baseEntity as Lizard;
    
    if( null != house )
    {
        // is a house
    }
    else if( null != lizard )
    {
        // is a lizard
    }
    else
    {
        // is neither a house nor a lizard
    }
    

    if( myEntity.baseEntity is House )
    {
        // is a house
    }
    else if( myEntity.baseEntity is Lizard )
    {
        // is a lizard
    }
    

    【讨论】:

    • 我实际上已经这样做了。我想知道是否有其他人能想到的更好的方法。像接口这样的东西在这里有意义吗,在接口上实现一些属性,所以我们不必知道能够使用它的确切类型,因为外键属性在子类上?接口是否会更好地工作,因为所有必要的属性都可以放在其中,并且它将“组合”抽象基类和子类?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-07
    • 1970-01-01
    相关资源
    最近更新 更多