代码之家  ›  专栏  ›  技术社区  ›  Hemanshu Bhojak

使用NHibernate从父id获取子项

  •  1
  • Hemanshu Bhojak  · 技术社区  · 14 年前

    我有一个子类,它没有ParentId属性,但在数据库中有所需的外键。我正在尝试使用NHibernate获取使用ParentId的子级,但它抛出了一个错误,表示无法解析属性ParentId。

    public class Parent
    {
         public int ParentId{ get; set; }
    
         public string Name{ get; set; }
    }
    
    public class Child
    {
         public int ChildId{ get; set; }
    
         public string Name{ get; set; }
    }
    
    <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                       assembly="SomeAssembly"
                       namespace="SomeAssembly.SomeNamespace">
        <class name="Parent" lazy="false" table="Parents">
            <id name="ParentId">
                <generator class="native" />
            </id>
            <property name="Name" />
        </class>
    
        <class name="Child" lazy="false" table="Children">
            <id name="ChildId">
                <generator class="native" />
            </id>
            <property name="Name" />
        </class>
    </hibernate-mapping>
    
    3 回复  |  直到 14 年前
        1
  •  1
  •   dmonlord    14 年前

    如果您不想拥有ParentId属性,您应该添加一个私有字段ParentId,然后您仍然可以查询它,但它不是公共的,因此它对应用程序的其余部分不可见。

        2
  •  1
  •   Jamie Ide    14 年前

    使用 Native SQL Query :

    return session.CreateSQLQuery("select * from ChildTable where ParentId = ?")
        .AddEntity(typeof(Child))
        .SetInt32(0, parentId)
        .UniqueResult<Child>();
    
        3
  •  1
  •   jyoungdev Thilo    14 年前

    要在域类中使用不带属性的NHibernate列,可以使用鲜为人知的noop访问: http://ayende.com/Blog/archive/2009/06/10/nhibernate-ndash-query-only-properties.aspx

    像这样的东西(我自己没试过):

    <property name="ParentId" access="noop" />
    

    我打赌你可以通过映射一个多到一个类型的Parent来让它更流畅。