NHhibernate的ISet与多对多关系

「已注销」 2013-01-31 09:47:30
User-用户表
RoleUser-用户角色表
Role-角色表
ActionPermission-资源表
ActionPermissionRole-角色资源分配

通过NHibernate来对数据库做操作

实体类:

public class User{
public virtual int Id{get;set;}
public virtual string UserName{get;set;}
public virtual ISet<Role> Roles{get;set;}
}

public class Role{
public virtual int Id{get;set;}
public virtual string Name{get;set;}
public virtual ISet<ActionPermission> ActionPermissions{get;set;}
}

public class ActionPermission{
public virtual int Id{get;set;}
public virtual string ActionName{get;set;}
public virtual ISet<Role> Roles{get;set;}
}



User.hbm.xml 文件:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="Demo.Core" namespace="Demo.Core.Authority">
<class name="Demo.Core.Authority.DisUser" table="dis_user" dynamic-insert="true" dynamic-update="true">
<id name="Id" column="userid" type="Int32" unsaved-value="0">
<generator class="native"/>
</id>
<property name="UserName" column="username" type="String"/>
<set name="Roles" table="dis_roleuser" lazy="true" fetch="select">
<key column="userid"/>
<many-to-many class="Demo.Core.Authority.Role" column="roleid" not-found="ignore" />
</set>
</class>
</hibernate-mapping>


Role.hbm.xml 文件:

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="Demo.Core" namespace="Demo.Core.Authority">
<class name="Demo.Core.Authority.Role" table="dis_role" dynamic-insert="true" dynamic-update="true">
<id name="Id" column="roleid" type="Int32" unsaved-value="0">
<generator class="native"/>
</id>
<property name="Name" column="Name" type="String"/>
<set name="ActionPermissions" table="dis_action_permission_role" lazy="true" fetch="select">
<key column="roleid"/>
<many-to-many class="Demo.Core.Authority.ActionPermission" not-found="ignore" column="action_permission_id" />
</set>
</class>
</hibernate-mapping>


ActionPermission.hbm.xml 文件:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="Demo.Core" namespace="Demo.Core.Authority">
<class name="Demo.Core.Authority.ActionPermission" table="dis_action_permission" dynamic-insert="true" dynamic-update="true">
<id name="Id" column="action_permission_id" type="Int32" unsaved-value="0">
<generator class="native"/>
</id>
<property name="ActionName" column="actionname" type="String"/>
<set name="Roles" table="dis_action_permission_role" lazy="true" fetch="select">
<key column="action_permission_id"/>
<many-to-many class="Demo.Core.Authority.Role" column="roleid" not-found="ignore" />
</set>
</class>
</hibernate-mapping>




可以通过 ASP.NET MVC 进行 增加,修改,删除 等都没问题。

但如果返回Role列表的Json格式的时候(HQL: SEELCT r FROM Role r),如果 ActionPermissionRole 里面很多记录(因为是多对多,一个角色<Role>拥有多个资源<ActionPermission>),问题就来了,显示到页面会很慢很慢,因为Json很大,页面没法呈现-----我使用Newtonsoft.Json来序列化(用MVC本身的分出现循环引用的错误)

是哪一个部分错了吗?

如果我把 ActionPermissionRole清空,速度是很快的,加载也没问题,一切正常。
...全文
56 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
strife013 2013-01-31
  • 打赏
  • 举报
回复

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧