zoukankan      html  css  js  c++  java
  • 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文件属性:

  • 相关阅读:
    EV3-一种多米诺骨牌搭建机
    UART 通用异步传输器
    用Python进行EV3编程
    vectorized case sum
    Profile your program using GNU gprof
    Usage of the const keyword in C++
    Principles about returning a large data chunk from a function
    [cf1361E]James and the Chase
    [cf1444D]Rectangular Polyline
    [atAGC043B]123 Triangle
  • 原文地址:https://www.cnblogs.com/lippor/p/4138101.html
Copyright © 2011-2022 走看看