在nhibernate中使用联接
本文关键字:nhibernate | 更新日期: 2023-09-27 17:59:06
我的应用程序代码如下所示
表格
tblPerson
---------
PersonId (PK)
Name
tblAddress
----------
AddressId(PK)
Address
PersonAddress
-------------
PersonId (PK)
AddressId
实体类
PersonAddresstbl.cs
public class PersonAddressl
{
private int personid;
private int addressid;
private string name;
public virtual int PersonId
{
get { return personid; }
set { personid = value; }
}
public virtual int AddressId
{
get { return addressid; }
set { addressid = value; }
}
public virtual string Name
{
get { return name; }
set { name = value; }
}
}
xml文件
个人地址tbl.hbn.xml
<class name="PersonAddressl">
<id name="id" column="PersonId">
<generator class="native"/>
</id>
<join table="tblPersonAddress"
optional="true">
<key column="PersonId"
unique="true"/>
<many-to-one name="Address"
column="AddressId"/>
</join>
</class>
<class name="tblAddress">
<id name="id" column="AddressId">
<generator class="native"/>
</id>
</class>
实现是
PersonAddresstbl tbl = new PersonAddresstbl();
Criteria crit = session.CreateCriteria(typeof(PersonAddresstbl));
IList lst = crit.List();
返回0条记录。
有人能告诉我我走的是正确的路还是哪里错了吗?
谢谢,Pavan
很难判断问题是什么,但在进行故障排除时,我总是在nHibernate中使用启用show_sql,这样我就可以看到生成的sql(因此您可以在数据库查询窗口中尝试)。有关信息,请参阅此链接:在nHibernate 中启用show_sql
我觉得奇怪的是,你的类'Person
'有一个类型为integer的属性'AddressId
',而在你的映射(Person
类的,它有一个奇怪的名称PersonAddressl')中,你指定你与类'Address
'有一对多的关系。除此之外,我看不出您有一个类"Address
"。而且,您的数据库模型在Person和Address之间具有多对多关系。
您使用的是join
映射,它使您能够将两个数据库表中的数据"合并"到一个类中,但您的类模型没有反映这一点。请在此处查看有关联接属性的更多信息:http://ayende.com/blog/3961/nhibernate-mapping-join
同时检查"设置":http://ayende.com/blog/3943/nhibernate-mapping-set