[NHibernate怎样配置数据关联]

NHibernate中对于关系的定义有one-to-one, one-to-many, many-to-one, many-to-many四种,为什么要设置one-to-one, one-to-many, many-to-one, many-to-many呢?在做如下例子的时候我一直在思考NHibernate 使用手迹(2nd),做到一半的时候醒悟了,呵呵,原来就是在Load某个对象的时候,也一并加载其对应关系的对象。就是说你获得了Customer对象以后,Customer.CustomerBank对象的数据也Load进来(当然,你也可以设置Lazy=true,后话)

具体到上述4个关系如何配置,我仅说明一个最简单的,并发现一些常犯的错误!

NHibernate中的一对一关联由“one-to-one”节点定义。也很容易理解,就是一个一对一的关系,例如,一个客户拥有一个而且只能拥有一个银行账户。

 

那么Customer.hbm.xml可以如下定义(当然还有其他的配置方法):

NHibernate 使用手迹(2nd)<?xml version="1.0" encoding="utf-8"?>
NHibernate 使用手迹(2nd)
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.0">
NHibernate 使用手迹(2nd)    
<class name="Data.Customer, Data" table="customer" >
NHibernate 使用手迹(2nd)        
<id name="CustomerID" type="Int32" unsaved-value="0">
NHibernate 使用手迹(2nd)           
<generator class="identity"/>
NHibernate 使用手迹(2nd)       
</id>
NHibernate 使用手迹(2nd)        
<property name="CustomerName" column="CustomerName" type="String" length="50"/>
NHibernate 使用手迹(2nd)        
<property name="Position" column="position" type="String"/>
NHibernate 使用手迹(2nd)        
<one-to-one name="CustomerBank" class="Data.Bank,Data" outer-join="true"/>
NHibernate 使用手迹(2nd)    
</class>
NHibernate 使用手迹(2nd)
</hibernate-mapping>

 

Bank.hbm.xml可以定义如下:

NHibernate 使用手迹(2nd)<?xml version="1.0" encoding="utf-8"?>
NHibernate 使用手迹(2nd)
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.0">
NHibernate 使用手迹(2nd)    
<class name="Data.Bank, Data" table="bank" >
NHibernate 使用手迹(2nd)        
<id name="CustomerID" type="Int32" unsaved-value="0">
NHibernate 使用手迹(2nd)           
<generator class="identity"/>
NHibernate 使用手迹(2nd)       
</id>
NHibernate 使用手迹(2nd)        
<property name="BankName" column="CustomerName" type="String" length="50"/>
NHibernate 使用手迹(2nd)        
<property name="BankBalance" column="position" type="Decimal"/>
NHibernate 使用手迹(2nd)    
</class>
NHibernate 使用手迹(2nd)
</hibernate-mapping>

 

[特别注意]

1 所有的hbm.xml的属性必须设置为Embedded Resource.否则会有异常抛出!

2 注意<one-to-one name="CustomerBank" 这里的CustomerBank,为什么是这个名字,有什么来源吗?答案是显然的,这个名字必须与你在Customer.cs文件中定义的对于访问PropertyBank的名字一致!也就是说,代码必须为:

NHibernate 使用手迹(2nd)       public Bank CustomerBank
       }

 

相关文章:

  • 2021-08-02
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-10-13
  • 2022-01-24
  • 2021-07-07
  • 2021-08-03
猜你喜欢
  • 2021-07-11
  • 2021-07-07
  • 2021-10-10
  • 2021-11-27
  • 2021-08-21
  • 2021-08-26
  • 2022-12-23
相关资源
相似解决方案