MVC+NHibernate

1.NHibernate 搭建

    1.1 架构说明         

  Domain    数据实体和数据库映射文件。

  Data        数据层存放数据库的操作及Nhibernate辅助类。引用Iesi.Collections.dll,NHibernate.dll和类库Domain

  Business 业务逻辑类。引用类库项目Domain, Data

      Web         web项目。需引用类库项目Domain, Business

  

   1.2 配置说明

        本例使用mssql数据库,所以从pakage文件夹找到MSSQL.cfg.xml文件复制内容插入web.config文件并修改数据库连接串映射程序集并在configSetions添加NHibernate

   <section name="hibernate-configuration" type="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate" />  

 

2.NHibernate持久化类和映射文件

    2.1使用CodeSmith    安装CodeSmith后,把模板文件复制粘贴到My Template文件夹中(截图已经加入了模板文件)

2.2 接着右击NHibernate.cst文件弹出框维护文件生成路径、程序集、命名空间、 数据库信息等信息,点击右下角Generate按钮执行。使用codeSmith会全表生成且每个表必须以id为主键

2.2 使用动软  安装动软连接数据库,右键需要生成的表选择“模板代码生成”-->右侧模板管理中选择nhibernate模板生成即可。

 

两种工具都可以生成NHibernate开发所需文件,但是生成内容有所不同。比如我数据库表名DP002_ETItem,前者生成类会去掉下划线且字段也会做相应处理,因为其生成的cfg.xml中做了相关处理。

 1 <?xml version="1.0" encoding="utf-8" ?>
 2 <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
 3     <class name="MyNamespace.Data.DP002ETItem, MyApp.MyAssembly" table="DP002_ETItem" dynamic-insert="true" dynamic-update="true" >
 4         <cache usage="read-write"  region="reg_DP002_ETItem"/>
 5         <id name="Id" type="Decimal" unsaved-value="null">
 6             <column name="DP002_ID" length="9" sql-type="numeric" not-null="true" unique="true"/>
 7             <generator class="assigned" />
 8         </id>
 9         <property name="ET101code" type="String">
10             <column name="ET101_code" length="50" sql-type="varchar" />
11         </property>
12         <property name="DP002ITemName" type="String">
13             <column name="DP002_ITemName" length="20" sql-type="varchar" />
14         </property>
15         <property name="DP002type" type="Int32">
16             <column name="DP002_type" length="4" sql-type="int" />
17         </property>
18         <property name="DP002other" type="String">
19             <column name="DP002_other" length="50" sql-type="varchar" />
20         </property>
21         <property name="EC004Code" type="String">
22             <column name="EC004_Code" length="10" sql-type="varchar" />
23         </property>
24     </class>
25 </hibernate-mapping>
View Code

 

 而动软生成的文件更贴合实际表结构。

<?xml version="1.0"  encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
  <class name="Domain.DP002_ETItem, Domain" table="DP002_ETItem"  dynamic-insert="true" dynamic-update="true">
    <id name="DP002_ID" column="DP002_ID" type="decimal" unsaved-value="0">
      <generator class="native" />
    </id>
    <property name="ET101_code" column="ET101_code" type="string"  />
    <property name="DP002_ITemName" column="DP002_ITemName" type="string"  />
    <property name="DP002_type" column="DP002_type" type="int"  />
    <property name="DP002_other" column="DP002_other" type="string"  />
    <property name="EC004_Code" column="EC004_Code" type="string"  />

  </class>
</hibernate-mapping>
View Code

 

总之,两种工具都可以简化开发,我更倾向于使用后者。 

 

posted @ 2017-10-20 15:13  sean-日积月累  阅读(333)  评论(0编辑  收藏  举报