我有一个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>
答案 0 :(得分:1)
如果您不想拥有ParentId属性,则应该使用私有字段ParentId,然后您仍然可以查询它,但它不是公开的,因此它对您应用程序的其余部分不可见。
答案 1 :(得分:1)
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" />
我敢打赌,你可以通过映射多对一类型的父来改变这一点。