1.学习目标
还是学习compenent的用法,上节实现了简单字段的组合,这节中将讨论两个问题:1.依赖对象有一个指向容器对象的引用。2。集合依赖
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性能之二级缓存篇 , nhibernate学习之简单组合的映射
3.通过parent为依赖组合对象映射一个指向容器对象的引用
CompositeUser.cs
<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->
publicclassCompositeUser


{
int_uid;
UserName_name;
publicintUid


{
get


{
return_uid;
}
set


{
_uid=value;
}
}

publicUserNameName


{
get


{
return_name;
}
set


{
_name=value;
}
}
}
UserName.cs
<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->
publicclassUserName


{
privatestring_firstName;
privatestring_lastName;
CompositeUser_user;
publicstringFirstName


{
get


{
return_firstName;
}
set


{
_firstName=value;
}
}
publicstringLastName


{
get


{
return_lastName;
}
set


{
_lastName=value;
}
}
publicCompositeUserUser


{
get


{
return_user;
}
set


{
_user=value;
}
}
}
映射文件:CompositeUser.hbm.xml
<?
xmlversion="1.0"encoding="utf-8"
?>
<
hibernate-mapping
xmlns
="urn:nhibernate-mapping-2.2"
>
<
class
name
="NhibernateSample1.CompositeUser,NhibernateSample1"
table
="CompositeUser"
lazy
="false"
>
<
id
name
="Uid"
column
="Uid"
unsaved-value
="0"
>
<
generator
class
="native"
/>
</
id
>
<
component
name
="Name"
class
="NhibernateSample1.UserName,NhibernateSample1"
>
<
parent
name
="User"
></
parent
>
<
property
name
="FirstName"
column
="FirstName"
></
property
>
<
property
name
="LastName"
column
="LastName"
></
property
>
</
component
>
</
class
>
</
hibernate-mapping
>
注意parent是指向容器对象的引用
加载一个CompositeUser对象,结果如图
4. 集合组合依赖
Composite.cs
<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->
publicclassCompositeUser


{
int_uid;
UserName_name;
ISet_userNames=newHashedSet();
DateTime_birthDay=DateTime.Now;
publicintUid


{
get


{
return_uid;
}
set


{
_uid=value;
}
}
publicISetUserNames


{
get


{
return_userNames;
}
set


{
_userNames=value;
}
}
publicDateTimeBirthDay


{
get


{
return_birthDay;
}
set


{
_birthDay=value;
}
}
}
UserName.cs
<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->
publicclassUserName


{
privatestring_firstName;
privatestring_lastName;
CompositeUser_user;
publicstringFirstName


{
get


{
return_firstName;
}
set


{
_firstName=value;
}
}
publicstringLastName


{
get


{
return_lastName;
}
set


{
_lastName=value;
}
}
publicCompositeUserUser


{
get


{
return_user;
}
set


{
_user=value;
}
}
}
映射文件CompositeUser.hbm.xml
<?
xmlversion="1.0"encoding="utf-8"
?>
<
hibernate-mapping
xmlns
="urn:nhibernate-mapping-2.2"
>
<
class
name
="NhibernateSample1.CompositeUser,NhibernateSample1"
table
="CompositeUser"
lazy
="false"
>
<
id
name
="Uid"
column
="Uid"
unsaved-value
="0"
>
<
generator
class
="native"
/>
</
id
>
<
set
name
="UserNames"
table
="UserNames"
lazy
="true"
>
<
key
column
="Uid"
/>
<
composite-element
class
="NhibernateSample1.UserName,NhibernateSample1"
>
<
property
name
="FirstName"
column
="FirstName"
></
property
>
<
property
name
="LastName"
column
="LastName"
></
property
>
</
composite-element
>
</
set
>
<
property
name
="BirthDay"
type
="DateTime"
></
property
>
</
class
>
</
hibernate-mapping
>
注意:Composite可以包含集合也可以不包含集合,上面这样的配置就不包括集合,映射的属性可以选择为List,map,bag,idbag
运行添加一个Composite的测试代码,会在数据库中建立两个数据表 CompositeUser和UserNames
效果图
还是学习compenent的用法,上节实现了简单字段的组合,这节中将讨论两个问题:1.依赖对象有一个指向容器对象的引用。2。集合依赖
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性能之二级缓存篇 , nhibernate学习之简单组合的映射
3.通过parent为依赖组合对象映射一个指向容器对象的引用
CompositeUser.cs


<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->












































<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->








































































加载一个CompositeUser对象,结果如图

4. 集合组合依赖
Composite.cs


<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->






























































<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->











































































运行添加一个Composite的测试代码,会在数据库中建立两个数据表 CompositeUser和UserNames
效果图

