SSH.net之model层
新建一个项目,第一个net版本的ssh项目,命名为:Nssh.project:
新建类库,作为项目model层
然后,开始编写代码:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Model { public class Users { public virtual int userID { get; set; } public virtual string uname { get; set; } public virtual Roles roles { get; set; }//一个用户有一个角色,一个角色可以有多个用户 } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Model { public class Roles { public virtual int rolesID { get; set; } public virtual string RolesName { get; set; } public virtual IList<Users> UserList { get; set; }//一个用户有一个角色,一个角色可以有多个用户 public virtual IList<Permission> permissionList { get; set; }//用户角色与权限是多对多关系 } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Model { public class Permission { public virtual int permissionID { get; set; } public virtual string PermissionName { get; set; } public virtual IList<Roles> rolesList { get; set; }//用户角色与权限是多对多关系 } }
hbm.xml文件
<?xml version="1.0" encoding="utf-8" ?> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Model" namespace="Model"> <class name="Model.Users, Model" table="P_Users"> <id name="userID" column="userID" type="int" > <generator class="native" /> </id> <property name="uname" column="uname" type="string" length="50" not-null="true"/> <many-to-one name="roles" column="RoleID" /> </class> </hibernate-mapping>
1 <?xml version="1.0" encoding="utf-8" ?> 2 <!--assembly指定工程名--> 3 <!--namespace命名空间--> 4 <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Model" namespace="Model"> 5 <!--name类名--> 6 <!--table表名--> 7 <!--lazy是否延迟加载--> 8 <class name="Model.Roles, Model" table="P_Roles"> 9 10 <id name="rolesID" column="rolesID" type="int" > 11 <generator class="native" /> 12 </id> 13 14 <property name="RolesName" column="RolesName" type="string" length="50" not-null="true"/> 15 16 <!--Bag:对象集合,每个元素可以重复。例如{1,2,2,6,0,0},在.Net中相当于IList或者IList<T> 17 实现。 18 Set:对象集合,每个元素必须唯一。例如{1,2,5,6},在.Net中相当于ISet或者ISet<T> 19 实现,Iesi.Collections.dll程序集提供ISet集合。 20 List:整数索引对象集合,每个元素可以重复。例如{{1,"YJingLee"},{2,"CnBlogs"},{3,"LiYongJing"}},在.Net中相当于ArraryList或者List<T> 21 实现。 22 Map:键值对集合。例如{{"YJingLee",5},{"CnBlogs",7},{"LiYongJing",6}},在.Net中相当于HashTable或者IDictionary<Tkey,TValue> 23 实现。 24 --> 25 <!--各个属性定义: 26 (1)name:属性名-必选属性 27 (2)Class:呗关联的类的名称(可选-默认是通过反射得到的属性类型) 28 (3) cascade(级联) (可选) 表明操作是否从父对象级联到被关联的对象 29 (4)constrained(约束)表名该类对应的表对应的数据库数据库表,和被关联的对象所对应的数据库表之间,通过一个外键引用对主键进行约束。 这个选项影响Save()和Delete()在级联执行时的先后顺序以及 决定该关联能否被委托(也在schema export tool中被使用). 30 31 (5) fetch (可选 - 默认设置为select): 在外连接抓取或者序列选择抓取选择其一. 32 (6) property-ref: (可选) 指定关联类的属性名,这个属性将会和本类的主键相对应。如果没有指定,会使用对方关联类的主键。 33 34 (7) access (可选 - 默认是 property): NHibernate用来访问属性的策略 35 --> 36 <!--“inverse”的属性是反转的意思,就是将操作交给双向关联关系中的另一端。 37 这篇文章很好的说明:http://blog.csdn.net/lingxyd_0/article/details/8494665 38 --> 39 <bag name="UserList" inverse="true" cascade="all-delete-orphan" table="P_Users"> 40 <key column="RoleID" foreign-key="FK_user_role"/> 41 <one-to-many class="Model.Users, Model" /> 42 </bag> 43 44 <bag name="permissionList" table="P_Role_Permission"> 45 <key column="RoleID" foreign-key="FK_role_permission"/> 46 <many-to-many class="Permission" column="permissionID"/> 47 </bag> 48 49 </class> 50 </hibernate-mapping>
<?xml version="1.0" encoding="utf-8" ?> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Model" namespace="Model"> <class name="Model.Permission, Model" table="P_Permission"> <id name="permissionID" column="permissionID" type="int" > <generator class="native" /> </id> <property name="PermissionName" column="PermissionName" type="string" length="50" not-null="true"/> <bag name="rolesList" table="P_Role_Permission"> <key column="permissionID" foreign-key="FK_role_permission"/> <many-to-many class="Roles" column="RoleID"/> </bag> </class> </hibernate-mapping>
最后记得设置hbm.xml文件属性: