使用NHibernate从父ID获取子项

时间:2010-07-06 10:16:06

标签: c# nhibernate

我有一个Child类,它没有ParentId属性,但在数据库中具有所需的外键。我试图让孩子们使用NHIBnate使用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 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

使用Native SQL Query

return session.CreateSQLQuery("select * from ChildTable where ParentId = ?")
    .AddEntity(typeof(Child))
    .SetInt32(0, parentId)
    .UniqueResult<Child>();

答案 2 :(得分:1)

要在您的域类中使用NHibernate而没有属性的列,请使用不太知名的noop访问:http://ayende.com/Blog/archive/2009/06/10/nhibernate-ndash-query-only-properties.aspx

这样的事情(我自己没试过):

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

我敢打赌,你可以通过映射多对一类型的父来改变这一点。