nhibernate學習之簡單組合的映射
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
public class UserName
{
private string _firstName;
private string _lastName;
public string FirstName
{
get
{
return _firstName;
}
set
{
_firstName=value;
}
}
public string LastName
{
get
{
return _lastName;
}
set
{
_lastName = value;
}
}
}
用戶對象:CompositeUser.cs
public class CompositeUser
{
int _uid;
UserName _name;
public int Uid
{
get
{
return _uid;
}
set
{
_uid = value;
}
}

public UserName Name
{
get
{
return _name;
}
set
{
_name = value;
}
}
用戶對象的映射文件.CompositeUser.hbm.xml
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class name="NhibernateSample1.CompositeUser,NhibernateSample1" table="CompostName" lazy="false">
<id name="Uid" column="Uid" unsaved-value="0">
<generator class="native" />
</id>
<component name="Name" class="NhibernateSample1.UserName,NhibernateSample1">
<property name="FirstName" column="FirstName"></property>
<property name="LastName" column="LastName"></property>
</component>
</class>
</hibernate-mapping>
注意,compenent就是映射組合屬性的節點,它的子節點property代表其組合屬性
CompositeUser數據表的表結構為

新增一個CompositeUser對象
public int AddCompositeUser(CompositeUser u)
{
session = NhibernateSample1.NHibernateHelper.GetCurrentSession();
ITransaction tra = session.BeginTransaction();
try
{
int res =(int)session.Save(u);
tra.Commit();
return res;
}
catch
{
tra.Rollback();
}
finally
{
session.Close();
}
return -1;
}
測試代碼
[TestMethod]
public void Test1()
{
usf.Configure();
usf.ExportTables();
CompositeUser u = new CompositeUser();
UserName name = new UserName();
name.FirstName = "zhang";
name.LastName = "jill";
u.Name = name;
int res =new NhibernateSample1.UserFixure().AddCompositeUser(u);
Assert.IsTrue(res>0);
}
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
public class UserName
{
private string _firstName;
private string _lastName;
public string FirstName
{
get
{
return _firstName;
}
set
{
_firstName=value;
}
}
public string LastName
{
get
{
return _lastName;
}
set
{
_lastName = value;
}
}
}用戶對象:CompositeUser.cs
public class CompositeUser
{
int _uid;
UserName _name;
public int Uid
{
get
{
return _uid;
}
set
{
_uid = value;
}
}
public UserName Name
{
get
{
return _name;
}
set
{
_name = value;
}
}
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class name="NhibernateSample1.CompositeUser,NhibernateSample1" table="CompostName" lazy="false">
<id name="Uid" column="Uid" unsaved-value="0">
<generator class="native" />
</id>
<component name="Name" class="NhibernateSample1.UserName,NhibernateSample1">
<property name="FirstName" column="FirstName"></property>
<property name="LastName" column="LastName"></property>
</component>
</class>
</hibernate-mapping>CompositeUser數據表的表結構為
新增一個CompositeUser對象
public int AddCompositeUser(CompositeUser u)
{
session = NhibernateSample1.NHibernateHelper.GetCurrentSession();
ITransaction tra = session.BeginTransaction();
try
{
int res =(int)session.Save(u);
tra.Commit();
return res;
}
catch
{
tra.Rollback();
}
finally
{
session.Close();
}
return -1;
}
[TestMethod]
public void Test1()
{
usf.Configure();
usf.ExportTables();
CompositeUser u = new CompositeUser();
UserName name = new UserName();
name.FirstName = "zhang";
name.LastName = "jill";
u.Name = name;
int res =new NhibernateSample1.UserFixure().AddCompositeUser(u);
Assert.IsTrue(res>0);
}
作者:jillzhang
出處:http://jillzhang.cnblogs.com/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。
出處:http://jillzhang.cnblogs.com/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。


浙公網安備 33010602011771號