按照搭建项目的顺序来比较好描述一些,我一般先搭建实体层,本节内容纯属于NHibernate范畴。先上图和代码,然后对着图和代码逐一讲解,以角色表为例:
T_Role表:
数据库表设计很简单,ID为主键,并且是自增长的,其他字段还包括角色名称(Name)、描述(Content)、排序(Sort)、状态(Status)、Del(是否删除)。这里就不对T_Role表赘述了。
T_Role类:
using System; //Nhibernate Code Generation Template 1.0 //author:MythXin //blog:www.cnblogs.com/MythXin //Entity Code Generation Template namespace Model{ //T_Role public class T_Role { /// <summary> /// ID /// </summary> public virtual int ID { get; set; } /// <summary> /// Name /// </summary> public virtual string Name { get; set; } /// <summary> /// Content /// </summary> public virtual string Content { get; set; } /// <summary> /// Order /// </summary> public virtual int? Sort { get; set; } /// <summary> /// 1 启用(默认) ///0 禁用 /// </summary> public virtual string Status { get; set; } /// <summary> /// 1 正常(默认) ///0 删除 /// </summary> public virtual string Del { get; set; } } }
T_Role类必须与T_Role表的字段一一对应,名字可以不一样,但是字段属性数量和类型必须是一一对应的,此外,每个字段属性都必须为virtual的。
T_Role表与T_Role的映射文件:
<?xml version="1.0" encoding="utf-8" ?> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Model" > <class name="Model.T_Role, Model" table="T_Role"> <id name="ID" column="ID" type="int" unsaved-value="0"> <generator class="native"/> </id> <property name="Name" type="string" column="Name" /> <property name="Content" type="string" column="Content" /> <property name="Sort" type="int" column="Sort" /> <property name="Status" type="string" column="Status" /> <property name="Del" type="string" column="Del" /> </class> </hibernate-mapping>
顾名思义,T_Role的映射文件是映射T_Role类和T_Role表的。注意以下几点:
(1) 必须按照上述格式书写,其中:
a. hibernate-mapping固定上述格式,assembly为文件所在的命名空间;
b. class标签中的name为“T_Role的命名空间.T_Role,T_Role的命名空间”,table为T_Role表的表名;
c. id标签为主键,必须有主键,unsaved-value="0"意思是默认值是0,<generator class="native"/>表示按照数据库定义的方式处理主键,如我定义了自增长;
d. id或property标签中的name为T_Role类中字段名称,而column必须为与之对应的T_Role表的字段名称,且数据类型相同;
(2) 文件必须以.hbm.xml后缀结尾,如:T_Role.hbm.xml;
(3) 必须右键点击文件-属性,将生成操作选为“嵌入的资源
说明:T_Role类文件(.cs文件)和T_Role映射文件(.hbm.xml)按理说可以分别放到不同的文件夹,但是这样放,运行的时候却提示找不到,最后无奈只能放一起了。要是哪位大神解决了此问题麻烦留言告知,谢谢。另外,视图和表的方式完全一样的,映射的时候指定映射的视图就行了。
最后,实体类和映射文件都是可以通过代码生成器生成的,建议不要自己去写,容易出错,还找不出错在哪里,用代码生成器生成之后不对的修改下就可以了。我使用的动软代码生成器,代码生成器连接上数据库后,右键对应的数据库选择“模板代码批量生成”,选定要生成的表、模板就可以了,操作很简单,就不详述了,不清楚的留言,或加入博客签名里的QQ群交流。
贴上Model的目录图,并不需要任何多余的引用:
版权声明:本文为博主原创文章,未经博主允许不得转载。