园子里面的兄弟们好,由于工作和身体的原因,几天来都没有写有关nhibernate学习系列了。看了看前几篇大家的回复,首先想要多谢兄弟们对小弟的关注和支持,可小弟水平有限,写出来的也只是入门级的心得。只是有一个心愿,那就是抛砖引玉,希望能和大家更多更好的互动。技术无极限,而我更想要得是能在园子里面认识更多的兄弟,更多的朋友。对了,忘记了一点事情,那就是,兄弟们,节日快乐,哈哈哈。。。唧唧歪歪这么多,大家不要见笑,下面进入正题
1) 学习目标
通过进一步学习Nhibernate基础知识,掌握用Nhiberate实现对级联的支持,通过一个简单的用户角色权限系统来体验nhibernate对级联的强大支持。
2)开发环境和必要准备
开发环境为:windows 2003,Visual studio .Net 2005,Sql server 2005 developer edition
必要准备:学习前三篇nhibernate学习系列 Nhibernate学习之起步篇-1 , Nhibernate学习起步之many-to-one篇 , Nhibernate学习之many-to-many篇
3)示例
业务需求:实现一个用户角色权限系统,一个用户只有一个角色,一个角色下有多个用户,一个角色下有多个权限,一个权限也对应多个角色
要求: (1).创建一个角色 (2)在该角色上创建两个个用户3)创建两个权限4)指定该角色上的权限列表5)获得一个用户的权限列表
首先看关系数据库关系图:
4)实现步骤:
1.User.cs
using
System;
using
System.Collections.Generic;
using
System.Text;
namespace
NhibernateSample1
{
public
class
User
{
private
int
_id;
private
string
_name;
private
string
_pwd;
private
Role_role;
///
<summary>
///
编号
///
</summary>
public
virtual
int
Id
{
get
{
return
_id;
}
set
{
_id
=
value;
}
}
///
<summary>
///
名称
///
</summary>
public
virtual
string
Name
{
get
{
return
_name;
}
set
{
_name
=
value;
}
}
///
<summary>
///
密码
///
</summary>
public
virtual
string
Pwd
{
get
{
return
_pwd;
}
set
{
_pwd
=
value;
}
}
public
virtual
RoleRole
{
get
{
return
_role;
}
set
{
_role
=
value;
}
}
}
}
User.hbm.xml
<?
xmlversion
=
"
1.0
"
encoding
=
"
utf-8
"
?>
<
hibernate
-
mappingxmlns
=
"
urn:nhibernate-mapping-2.2
"
>
<
class
name
=
"
NhibernateSample1.User,NhibernateSample1
"
table
=
"
Users
"
lazy
=
"
false
"
>
<
idname
=
"
Id
"
column
=
"
Id
"
unsaved
-
value
=
"
0
"
>
<
generator
class
=
"
native
"
/>
</
id
>
<
propertyname
=
"
Name
"
column
=
"
Name
"
type
=
"
string
"
length
=
"
64
"
not
-
null
=
"
true
"
unique
=
"
true
"
></
property
>
<
propertyname
=
"
Pwd
"
column
=
"
Pwd
"
type
=
"
string
"
length
=
"
64
"
not
-
null
=
"
true
"
></
property
>
<
many
-
to
-
onename
=
"
Role
"
class
=
"
NhibernateSample1.Role,NhibernateSample1
"
column
=
"
RoleID
"
></
many
-
to
-
one
>
</
class
>
</
hibernate
-
mapping
>
2.Role.cs
using
System;
using
System.Collections.Generic;
using
System.Text;
using
System.Collections;
namespace
NhibernateSample1
{
public
class
Role
{
int
_roleID;
string
_roleName;
IList_list
=
new
ArrayList();
IList_permissionList
=
new
ArrayList();
public
virtual
IListPermissionList
{
get
{
return
_permissionList;
}
set
{
_permissionList
=
value;
}
}
public
virtual
int
RoleID
{
get
{
return
_roleID;
}
set
{
_roleID
=
value;
}
}
public
virtual
IListUserList
{
get
{
return
_list;
}
set
{
_list
=
value;
}
}
public
virtual
string
RoleName
{
get
{
return
_roleName;
}
set
{
_roleName
=
value;
}
}
}
}
Role.hbm.xml
<?
xmlversion
=
"
1.0
"
encoding
=
"
utf-8
"
?>
<
hibernate
-
mappingxmlns
=
"
urn:nhibernate-mapping-2.2
"
>
<
class
name
=
"
NhibernateSample1.Role,NhibernateSample1
"
table
=
"
Roles
"
lazy
=
"
false
"
>
<
idname
=
"
RoleID
"
column
=
"
RoleID
"
unsaved
-
value
=
"
0
"
>
<
generator
class
=
"
native
"
/>
</
id
>
<
propertyname
=
"
RoleName
"
column
=
"
RoleName
"
type
=
"
string
"
length
=
"
64
"
not
-
null
=
"
true
"
></
property
>
<
bagname
=
"
PermissionList
"
table
=
"
Role_Permissions
"
inverse
=
"
true
"
lazy
=
"
false
"
cascade
=
"
all
"
>
<
keycolumn
=
"
RoleID
"
/>
<
many
-
to
-
many
class
=
"
NhibernateSample1.Permission,NhibernateSample1
"
column
=
"
PermissionID
"
></
many
-
to
-
many
>
</
bag
>
<
bagname
=
"
UserList
"
table
=
"
Users
"
inverse
=
"
true
"
lazy
=
"
false
"
cascade
=
"
all
"
>
<
keycolumn
=
"
RoleID
"
/>
<
one
-
to
-
many
class
=
"
NhibernateSample1.User,NhibernateSample1
"
></
one
-
to
-
many
>
</
bag
>
</
class
>
</
hibernate
-
mapping
>
3.Permission.cs
using
System;
using
System.Collections.Generic;
using
System.Text;
using
System.Collections;
namespace
NhibernateSample1
{
public
class
Permission
{
int
_permissionID;
string
_permissionName;
IList_roleList
=
new
ArrayList();
public
virtual
int
PermissionID
{
get
{
return
_permissionID;
}
set
{
_permissionID
=
value;
}
}
public
virtual
string
PermissionName
{
get
{
return
_permissionName;
}
set
{
_permissionName
=
value;
}
}
public
virtual
IListRoleList
{
get
{
return
_roleList;
}
set
{
_roleList
=
value;
}
}
}
}
Permission.hbm.xml
<?
xmlversion
=
"
1.0
"
encoding
=
"
utf-8
"
?>
<
hibernate
-
mappingxmlns
=
"
urn:nhibernate-mapping-2.2
"
>
<
class
name
=
"
NhibernateSample1.Permission,NhibernateSample1
"
table
=
"
Permissions
"
lazy
=
"
false
"
>
<
idname
=
"
PermissionID
"
column
=
"
PermissionID
"
unsaved
-
value
=
"
0
"
>
<
generator
class
=
"
native
"
/>
</
id
>
<
propertyname
=
"
PermissionName
"
column
=
"
PermissionName
"
type
=
"
string
"
length
=
"
64
"
not
-
null
=
"
true
"
unique
=
"
true
"
></
property
>
<
bagname
=
"
RoleList
"
table
=
"
Role_Permissions
"
lazy
=
"
true
"
>
<
keycolumn
=
"
PermissionID
"
/>
<
many
-
to
-
many
class
=
"
NhibernateSample1.Role,NhibernateSample1
"
column
=
"
RoleID
"
></
many
-
to
-
many
>
</
bag
>
</
class
>
</
hibernate
-
mapping
>
4。数据操作类
UserRolePermissionFixure
5。单元测试类
UnitTest1.cs
通过本篇的学习,将充分理解到nhibernate对级联支持的强大。另外除了支持三级联之外,他还支持异类关联(Heterogeneous Associations) .给开发带来了更多的灵活性和实用性。而且考虑到性能的问题,还添加了lazy这样的延迟加载的功能,加载父亲不必要一定要加载他的儿子集合。通过集合类映射,nhinernate轻松实现级联,这相比较代码生成来说,无疑是一个优点。
1) 学习目标
通过进一步学习Nhibernate基础知识,掌握用Nhiberate实现对级联的支持,通过一个简单的用户角色权限系统来体验nhibernate对级联的强大支持。
2)开发环境和必要准备
开发环境为:windows 2003,Visual studio .Net 2005,Sql server 2005 developer edition
必要准备:学习前三篇nhibernate学习系列 Nhibernate学习之起步篇-1 , Nhibernate学习起步之many-to-one篇 , Nhibernate学习之many-to-many篇
3)示例
业务需求:实现一个用户角色权限系统,一个用户只有一个角色,一个角色下有多个用户,一个角色下有多个权限,一个权限也对应多个角色
要求: (1).创建一个角色 (2)在该角色上创建两个个用户3)创建两个权限4)指定该角色上的权限列表5)获得一个用户的权限列表
首先看关系数据库关系图:

4)实现步骤:
1.User.cs




























































































































































































































