就以一个简单的DirectCenter项目开始介绍这个框架吧,DirectCenter主要分为用户管理,部门管理,公司管理三个模块。首先先搭建起解决方案DirectCenter:
DirectCenter:
DirectCenter.Model (类库项目)实体类库,其中包括hibernate映射文件(可以把映射文件放到DAL层,这样使Model也比较单纯,而DAL则只是Nhibernate的完整实现)
DirectCenter.IDAL (类库项目)数据访问层接口
DirectCenter.DAL (类库项目)数据库访问层实现(采用NHibernate)
DirectCenter.IBLL (类库项目)业务层接口
DirectCenter.BLL (类库项目)业务层实现(使用IDAL,通过spring.net的IOC注入实际的数据访问层)
DirectCenter.App (类库项目)系统的配置,其中包括Nhibernate,Spring.net的一些配置信息,业务层的DAL注入.
DirectCenter.UnitTest (类库项目) 使用nunit对业务层进行单元测试

DirectCenter.DTO (类库项目) data transform object 用于和前台UI层交互的实体。之所以分出来,也是为了考虑不只是为了Web项目,同时包括WebService等其它UI.(可能会有不少人会问已经有Model了,为什么还需要DTO?)

DirectCenter.Controllers (类库项目) Web控制器。用户请求和后台业务层的中转,接收并分析用户请求,调用业务层完成请求,再分发给用户。(注意这里调用的是IBLL,是业务逻辑接口,也是通过Spring.Net的IOC注入具体的业务实现)。
DirectCenter.Web (Web Application) 单纯的View层,主要由ExtJs完成界面和Ajax请求。

当然,这里也可以加一个Controllers的单元测试项目,不过我觉得这里很多时候用处不是很大。因为这里Controllers的工作比较统一和单纯了。
首先先设计和建立数据库,字段和说明如下:
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2

数据库中没有外键关系,因为一对多,多对多这些关系使用NHibernate的持久层建立和维护,每个表中都有一个Version字段,这是为了使用Nhibernate内置的对象的版本控制来解决并发问题。
接下来的工作就简单了许多,因为今天我们只要完成实体就行,而实体类和映射文件的工作有一些辅助工具可以帮我们生成,比如codesmith, Nconstruct,Database2Sharp等,不过我还没有发现哪个工具能够很好的生成关系映射.这里只把User的类和映射文件放在这里,其 它的两个可以在源代码附件中找到。

Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2User.cs
<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2usingSystem;
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
usingSystem.Collections.Generic;
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
usingSystem.Text;
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
usingSystem.Collections;
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
namespaceDirectCenter.Model
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2{
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2[Serializable]
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
publicclassUser
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2{
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
/**////<summary>
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
///创建日期
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
///</summary>

Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2publicvirtualDateTimeCreateTime
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2{
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
get;
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
set;
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2}

Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
/**////<summary>
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
///创建人
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
///</summary>

Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2publicvirtualSystem.StringCreator
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2{
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
get;
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
set;
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2}

Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
/**////<summary>
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
///Email地址
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
///</summary>

Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2publicvirtualSystem.StringEmail
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2{
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
get;
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
set;
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2}

Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
/**////<summary>
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
///用户编号
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
///</summary>
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
///

Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2publicvirtualSystem.StringUserID
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2{
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
get;
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
set;
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2}

Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
/**////<summary>
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
///导入日期
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
///</summary>

Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2publicvirtualDateTime?ImportTime
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2{
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
get;
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
set;
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2}

Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
/**////<summary>
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
///手机号码
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
///</summary>

Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2publicvirtualSystem.StringMobile
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2{
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
get;
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
set;
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2}

Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
/**////<summary>
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
///用户密码
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
///</summary>

Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2publicvirtualSystem.StringPassword
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2{
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
get;
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
set;
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2}

Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
/**////<summary>
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
///电话号码
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
///</summary>

Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2publicvirtualSystem.StringTelephone
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2{
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
get;
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
set;
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2}

Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
/**////<summary>
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
///用户名称
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
///</summary>

Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2publicvirtualSystem.StringUserName
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2{
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
get;
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
set;
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2}

Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
/**////<summary>
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
///生效日期
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
///</summary>

Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2publicvirtualDateTime?ValidFrom
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2{
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
get;
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
set;
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2}

Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
/**////<summary>
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
///失效日期
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
///</summary>

Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2publicvirtualDateTime?ValidTo
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2{
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
get;
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
set;
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2}

Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
/**////<summary>
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
///所属公司
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
///</summary>

Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2publicvirtualCompanyCompany
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2{
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
get;
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
set;
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2}

Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
/**////<summary>
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
///所属部门
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
///</summary>

Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2publicvirtualDepartmentDepartment
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2{
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
get;
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
set;
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2}

Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
/**////<summary>
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
///直接主管
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
///</summary>

Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2publicvirtualUserManager
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2{
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
get;
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
set;
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2}

Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2}

Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2}

Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2

Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2User.hbm.xml
<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2<?xmlversion="1.0"encoding="utf-8"?>
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
<hibernate-mappingxmlns="urn:nhibernate-mapping-2.2">
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
<classname="DirectCenter.Model.User,DirectCenter.Model"table="UserAccount"lazy="true">
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
<idname="UserID"column="UserID"type="System.String">
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
<generatorclass="assigned"/>
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
</id>
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
<propertyname="CreateTime"column="CreateTime"type="System.DateTime"/>
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
<propertyname="Creator"column="Creator"type="System.String"length="32"/>
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
<propertyname="Email"column="Email"type="System.String"length="255"/>
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
<propertyname="Mobile"column="Mobile"type="System.String"length="15"/>
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
<propertyname="Password"column="Password"type="System.String"length="64"/>
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
<propertyname="Telephone"column="Telephone"type="System.String"length="20"/>
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
<propertyname="UserName"column="UserName"not-null="true"type="System.String"length="32"/>
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
<propertyname="ValidFrom"column="ValidFrom"type="System.DateTime"/>
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
<propertyname="ValidTo"column="ValidTo"type="System.DateTime"/>
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
<!--用户所属交易公司-->
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
<many-to-onename="Company"
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2class
="DirectCenter.Model.Company,DirectCenter.Model"
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2cascade
="none"
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2column
="CompanyID"
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
/>
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
<!--用户所属部门-->
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
<many-to-onename="Department"
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2class
="DirectCenter.Model.Department,DirectCenter.Model"
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2cascade
="none"
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2column
="DepartmentID"
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
/>
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
<!--主管-->
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
<many-to-onename="Manager"
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2class
="DirectCenter.Model.User,DirectCenter.Model"
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2cascade
="none"
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2column
="ManagerID"
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
/>
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
</class>
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
</hibernate-mapping>
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2

注:User的表名和实体名不一致的原因是因为User是数据库中的关键字。另外需要注意的是,映射文件中的命名空间要正确,映射文件(*.hbm.xml)不要忘了设置成Embedded Resource (嵌入式资源)。

数据库设计,实体,映射文件是使用这个框架开发最关键的,毕竟是转换需求的最重要的一步。如果设计的好的话,接下来的开发相对容易多了。下次介绍数据访问层和业务层的实现。

代码

相关文章: