繁体   English   中英

将Nhibernate父实体转换为子实体

[英]Cast Nhibernate parent entity to child

父级

public class ParentMap : Map<Parent>
    {
        public ParentMap()
        {
            DiscriminateSubClassesOnColumn<string>("Provider").Nullable();
        }
    }

儿童:

public class Child1Map : SubclassMap<Child1>
{
    public FacebookAccountMap()
    {
        DiscriminatorValue("child1");
    }
}
public class Child2Map : SubclassMap<Child2>
{
    public FacebookAccountMap()
    {
        DiscriminatorValue("child2");
    }
}

从服务中我得到的情况下Parent ,但财产item.Provider等于childOne,我怎样才能得到的实例Child1Child2 基于proprty提供的价值

恐怕您的问题尚不完全清楚,但我将作一个猜测:

您很可能不会收到Parent的实例,但是会收到ParentProxy的实例,这是NHibernate生成并继承自Parent的类。 此类不能强制转换为Child1,但是该实例实际上将包含 Child1类的实例。 方法调用将转发到此包含的类。 这种机制是NHibernate的延迟加载系统的一部分-由于NHibernate需要创建代理对象而不加载完整的对象数据,因此它不知道使用哪种确切类型。

如果您通过遵循其他类的引用来获取实例,则会发生这种情况。

通常的想法是:

  1. 您通常不需要投射。 如果需要从基类转换为子类,则无法成功创建良好的面向对象的设计,因此应探索避免转换的方法(因为继承结构暗示调用者不必关心实际的子类。 ,则强制转换违反了此原则,因此应尽可能避免)。
  2. 如果确实必须访问真正的Child1实例,则可以在基类中提供As<T>()方法

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM