代码之家  ›  专栏  ›  技术社区  ›  SecretDeveloper

使用nHibernate只返回父级

  •  0
  • SecretDeveloper  · 技术社区  · 14 年前

    我对nhibernate很陌生,所以这可能很简单,但我还没有在网上找到答案。

    假设我有一个父类和一个子类。父类可以有多个子类与之关联。现在,当我尝试加载一个特定的父nhibernate时,它也会为我填充它的子集合。在某些情况下,我只想返回没有子集合的父类。

    那么,有没有一种方法来定义一个父类,比方说ParentView,它在同一个表上工作,但只包含父属性,而不包含它的所有子和孙子?

    2 回复  |  直到 14 年前
        1
  •  3
  •   sh_kamalh    14 年前

    定义包含需要检索的列的类ParentView。确保这个类有一个无参数构造函数。

    ISession session = NHibernateHelper.Session;
    ISQLQuery query = session.CreateSQLQuery("select Parent_ID, Name form Parent where Parent_ID = :parentID");
    query.SetInt32("parentID", parentID);
    IList<ParentView> parentView = query.SetResultTransformer(Transformers.AliasToBean<ParentView>()).List<ParentView>();
    return parentView;
    
        2
  •  0
  •   Community CDub    8 年前

    另一种方法是根据sh_kamalh的建议创建视图类和关联查询(如果我是您,我会考虑这个方法)。如果问题与行李映射结构有关,那么您可能有两个更简单的解决方案:

    选择1

    重新访问包映射-也许简单地选择不同的策略就能解决问题。我以前回答过一个关于不同集合映射的问题 List vs Set vs Bag in NHibernate 就我个人而言,我经常使用固定策略。要在Fluent NHibernate中映射不同的策略,请在覆盖中使用以下指南。

    mapping.HasMany<Child>(x => x.Children).ToSet();
    

    mapping.HasMany<Child>(x => x.Children).ToList();
    

    选择2

    与NHibernate没有特别的关系,但是如果您使用的是默认的xml序列化程序,那么您可以告诉xml序列化程序忽略该属性并保留bag映射。

    [System.Xml.Serialization.XmlIgnore]
    public IEnumerable<Child> Children { get; internal set; }
    
    推荐文章