nhibernate学习之简单组合的映射
2008-03-30 19:29
363 查看
1.学习目标
通过学习nhibernate基础知识,了解nhibernate对组合属性的用法。
2.开发环境和必要准备
开发环境为:windows 2003,Visual studio .Net 2005,Sql server 2005 developer edition
必要准备:学习前六篇nhibernate学习系列Nhibernate学习之起步篇-1 ,Nhibernate学习起步之many-to-one篇 ,Nhibernate学习之many-to-many篇 ,nhibernate学习之三级联(Ternary Associations)篇 ,Nhibernate学习之性能改善1 ,nhibernate性能之二级缓存篇
3.分析
在关系数据库中,为了减少冗余,每个字段会被设计的更加独立。比如一个人的名字,包括名(FirstName),姓(LastName),通常在数据库中要设计为两个字段,这样便于检索所有姓张的用户,而在对象中,一个人的姓名往往是一个组合元素,nhibernate对组合属性也有很好的支持
4.实现方法
用于组织姓名的对象UserName
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
public class UserName
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
private string _firstName;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
private string _lastName;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
public string FirstName
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
get
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
return _firstName;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
set
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
_firstName=value;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
public string LastName
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
get
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
return _lastName;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
set
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
_lastName = value;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
用户对象:CompositeUser.cs
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
public class CompositeUser
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
int _uid;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
UserName _name;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
public int Uid
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
get
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
return _uid;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
set
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
_uid = value;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
public UserName Name
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
get
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
return _name;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
set
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
_name = value;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
用户对象的映射文件.CompositeUser.hbm.xml
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<?xml version="1.0" encoding="utf-8" ?>
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<class name="NhibernateSample1.CompositeUser,NhibernateSample1" table="CompostName" lazy="false">
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<id name="Uid" column="Uid" unsaved-value="0">
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<generator class="native" />
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
</id>
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<component name="Name" class="NhibernateSample1.UserName,NhibernateSample1">
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<property name="FirstName" column="FirstName"></property>
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<property name="LastName" column="LastName"></property>
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
</component>
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
</class>
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
</hibernate-mapping>
注意,compenent就是映射组合属性的节点,它的子节点property代表其组合属性
CompositeUser数据表的表结构为
![](http://www.cnblogs.com/images/cnblogs_com/jillzhang/34fgbj.JPG)
新增一个CompositeUser对象
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
public int AddCompositeUser(CompositeUser u)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
session = NhibernateSample1.NHibernateHelper.GetCurrentSession();
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
ITransaction tra = session.BeginTransaction();
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
try
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
int res =(int)session.Save(u);
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
tra.Commit();
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
return res;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
catch
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
tra.Rollback();
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
finally
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
session.Close();
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
return -1;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
测试代码
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
[TestMethod]
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
public void Test1()
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
usf.Configure();
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
usf.ExportTables();
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
CompositeUser u = new CompositeUser();
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
UserName name = new UserName();
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
name.FirstName = "zhang";
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
name.LastName = "jill";
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
u.Name = name;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
int res =new NhibernateSample1.UserFixure().AddCompositeUser(u);
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
Assert.IsTrue(res>0);
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
nhibernate真的是非常强大的一个框架,下篇将学习复杂组合的使用方法。今天先到这。睡了
通过学习nhibernate基础知识,了解nhibernate对组合属性的用法。
2.开发环境和必要准备
开发环境为:windows 2003,Visual studio .Net 2005,Sql server 2005 developer edition
必要准备:学习前六篇nhibernate学习系列Nhibernate学习之起步篇-1 ,Nhibernate学习起步之many-to-one篇 ,Nhibernate学习之many-to-many篇 ,nhibernate学习之三级联(Ternary Associations)篇 ,Nhibernate学习之性能改善1 ,nhibernate性能之二级缓存篇
3.分析
在关系数据库中,为了减少冗余,每个字段会被设计的更加独立。比如一个人的名字,包括名(FirstName),姓(LastName),通常在数据库中要设计为两个字段,这样便于检索所有姓张的用户,而在对象中,一个人的姓名往往是一个组合元素,nhibernate对组合属性也有很好的支持
4.实现方法
用于组织姓名的对象UserName
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
public class UserName
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
private string _firstName;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
private string _lastName;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
public string FirstName
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
get
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
return _firstName;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
set
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
_firstName=value;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
public string LastName
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
get
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
return _lastName;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
set
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
_lastName = value;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
用户对象:CompositeUser.cs
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
public class CompositeUser
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
int _uid;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
UserName _name;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
public int Uid
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
get
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
return _uid;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
set
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
_uid = value;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
public UserName Name
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
get
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
return _name;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
set
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
_name = value;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
用户对象的映射文件.CompositeUser.hbm.xml
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<?xml version="1.0" encoding="utf-8" ?>
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<class name="NhibernateSample1.CompositeUser,NhibernateSample1" table="CompostName" lazy="false">
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<id name="Uid" column="Uid" unsaved-value="0">
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<generator class="native" />
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
</id>
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<component name="Name" class="NhibernateSample1.UserName,NhibernateSample1">
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<property name="FirstName" column="FirstName"></property>
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<property name="LastName" column="LastName"></property>
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
</component>
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
</class>
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
</hibernate-mapping>
注意,compenent就是映射组合属性的节点,它的子节点property代表其组合属性
CompositeUser数据表的表结构为
新增一个CompositeUser对象
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
public int AddCompositeUser(CompositeUser u)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
session = NhibernateSample1.NHibernateHelper.GetCurrentSession();
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
ITransaction tra = session.BeginTransaction();
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
try
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
int res =(int)session.Save(u);
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
tra.Commit();
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
return res;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
catch
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
tra.Rollback();
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
finally
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
session.Close();
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
return -1;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
测试代码
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
[TestMethod]
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
public void Test1()
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
usf.Configure();
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
usf.ExportTables();
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
CompositeUser u = new CompositeUser();
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
UserName name = new UserName();
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
name.FirstName = "zhang";
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
name.LastName = "jill";
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
u.Name = name;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
int res =new NhibernateSample1.UserFixure().AddCompositeUser(u);
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
Assert.IsTrue(res>0);
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
nhibernate真的是非常强大的一个框架,下篇将学习复杂组合的使用方法。今天先到这。睡了
相关文章推荐
- nhibernate学习之简单组合的映射
- nhibernate学习之简单组合的映射
- nhibernate学习之简单组合的映射
- nhibernate学习之简单组合的映射
- nhibernate学习之简单组合的映射
- NHibernate学习手记(5) - 简单的对象映射
- NHibernate学习手记(5) - 简单的对象映射
- NHibernate学习手记(5) - 简单的对象映射
- NHibernate学习手记(5) - 简单的对象映射
- Java的Hibernate框架中的组合映射学习教程
- NHibernate学习手记(6) - 实现one2many/many2one的映射
- Nhibernate学习,映射文件
- nhibernate学习之集合组合依赖
- nhibernate学习之集合组合依赖
- 学习使用NHibernate2.1.0Beta1(三)— 创建映射类库
- NHibernate学习手记(6) - 实现one2many/many2one的映射
- NHibernate学习手记(6) - 实现one2many/many2one的映射
- Nhibernate学习教程一 简单的应用
- nhibernate学习之集合组合依赖
- NHibernate 映射基础(第三篇) 简单映射、联合主键