`
yyw84
  • 浏览: 78673 次
社区版块
存档分类
最新评论
阅读更多

      在某一天忽然觉得用 NHibernate 来实现无限级将会是多么简单,简单到你做梦都无法想到,似乎它天生就具备了处理这种情况的超能力。就连数据表的设计也被简化到了极致。

      下面我会简单说明一下实现的步骤并给出源码下载,同时它也是 ASP.NET 2.0 + Spring.Net + Nhibernate + MYSQL 的一个实例,之所以使用了几个框架组合和 MYSQL 做为数据库,完全是出于自娱自乐,但我还是更希望大家把重点放在 NHibernate 实现无限级分类上。

      第一步:创建数据库

-- 创建数据库
CREATE DATABASE hibernatedemo;

-- 添加表 tb_Classes
DROP TABLE IF EXISTS `hibernatedemo`.`tb_classes`;
CREATE TABLE  `hibernatedemo`.`tb_classes` (
  `Id` 
int(10) unsigned NOT NULL DEFAULT '1',
  `Name` 
varchar(45NOT NULL,
  `ParentId` 
int(10) unsigned DEFAULT NULL,
  `SortOrder` 
int(10) unsigned NOT NULL DEFAULT '0',
  
PRIMARY KEY (`Id`),
  
KEY `tb_classes_ibfk_1` (`ParentId`),
  
CONSTRAINT `tb_classes_ibfk_1` FOREIGN KEY (`ParentId`) REFERENCES `tb_classes` (`Id`)
) ENGINE
=InnoDB DEFAULT CHARSET=utf8;

      第二步: 创建实体关系映射(实体层)
      新建解决方案 NhibernateDemo,添加 ModelObject 项目用于存放实体类和映射文件。
      创建 ClassesInfo.hbm.xml 文件 (CodeSmith 生成,需做修改)


<!----><?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.0">
    
<class name="Yyw.ModelObject.ClassesInfo, Yyw.ModelObject" table="tb_classes">
        
<cache usage="read-write"/>
        
<id name="Id" type="Int32" unsaved-value="null">
            
<column name="Id" length="4" sql-type="int" not-null="true" unique="true" index="PK_tb_classes"/>
            
<generator class="Yyw.ModelObject.ClassesIdGenerator, Yyw.ModelObject" />
        
</id>
        
<property name="Name" type="String">
            
<column name="Name" length="45" sql-type="varchar" not-null="false"/>
        
</property>
        
<property name="SortOrder" type="Int32">
            
<column name="`SortOrder`" length="4" sql-type="int" not-null="true"/>
        
</property>
        
<many-to-one name="Parent" class="Yyw.ModelObject.ClassesInfo, Yyw.ModelObject" update="true" insert="true" cascade="delete-orphan">
            
<column name="ParentId" length="4" sql-type="int" not-null="false"/>
        
</many-to-one>
        
<bag name="Parenttb_classes" inverse="true" lazy="true" cascade="all-delete-orphan">
            
<key column="ParentId"/>
            
<one-to-many class="Yyw.ModelObject.ClassesInfo, Yyw.ModelObject"/>
        
</bag>
    
</class>
  
<query name="Yyw.ModelObject.ClassesInfo.Select.By.ParentId.Is.Null">
    
<![CDATA[
    from ClassesInfo classesInfo where classesInfo.Parent.Id is null
    
]]>
  
</query>
</hibernate-mapping>

      创建实体类 ClassesInfo.cs (CodeSmith 生成,需做修改)


<!---->using System;
using System.Collections;
using System.Web.UI.WebControls;
using System.Collections.Generic;

namespace Yyw.ModelObject
{
    
ClassesInfo#region ClassesInfo

    
/**//// <summary>
    
/// ClassesInfo object for NHibernate mapped table 'tb_classes'.
    
/// </summary>
    public class ClassesInfo : System.IComparable
    
{
        
Member Variables#region Member Variables
        
        
protected int _id;
        
protected string _name;
        
protected int _sortOrder;
        
protected ClassesInfo _parent;
        
protected IList<ClassesInfo> _parenttbclasses;
        
protected static String _sortExpression = "Id";
        
protected static SortDirection _sortDirection = SortDirection.Ascending;

        
#endregion


        
Constructors#region Constructors

        
public ClassesInfo() { }

        
public ClassesInfo(string name, int sortOrder, ClassesInfo parent)
        
{
            
this._name = name;
            
this._sortOrder = sortOrder;
            
this._parent = parent;
        }


        
#endregion


        
Public Properties#region Public Properties

        
public virtual int Id
        
{
            
get return _id; }
            
set { _id = value; }
        }


        
public virtual string Name
        
{
            
get return _name; }
            
set
            
{
                
if ( value != null && value.Length > 45)
                    
throw new ArgumentOutOfRangeException("Invalid value for Name", value, value.ToString());
                _name 
= value;
            }

        }


        
public virtual int SortOrder
        
{
            
get return _sortOrder; }
            
set { _sortOrder = value; }
        }


        
public virtual ClassesInfo Parent
        
{
            
get return _parent; }
            
set { _parent = value; }
        }


        
public virtual IList<ClassesInfo> Parenttb_classes
        
{
            
get return _parenttbclasses; }
            
set { _parenttbclasses = value; }
        }


        
public static String SortExpression
分享到:
评论

相关推荐

    C# ORM NHibernate-5.2.4-bin.zip

    标题中的"C# ORM NHibernate-5.2.4-bin.zip"指的是一个包含C#编程语言中使用的对象关系映射(ORM)框架NHibernate的版本5.2.4的二进制文件包。ORM是一种编程技术,它允许开发人员使用面向对象的语言(如C#)来操作...

    NHibernate-2.0.1

    NHibernate-2.0.1NHibernate-2.0.1NHibernate-2.0.1NHibernate-2.0.1NHibernate-2.0.1NHibernate-2.0.1NHibernate-2.0.1NHibernate-2.0.1

    NHibernate Profiler-v5.0- 破解版

    NHibernate.Profiler-v5.0破解版,双击exe直接运行,zip为原文件

    NHibernate-2.1.2.GA-bin NHibernate框架

    这个“NHibernate-2.1.2.GA-bin”压缩包包含了 NHibernate 的一个稳定版本,尽管它可能相对较旧,但仍然具有很高的学习价值和实用性。 NHibernate 是基于 Hibernate 的概念,Hibernate 是一个广泛应用于 Java 平台...

    nhibernate one-to-meny

    NHibernate 是一款强大的对象关系映射(ORM)框架,广泛应用于.NET 开发中,它能够将数据库中的表映射为C#对象,简化了数据库操作。"one-to-many"是数据库关系模型中的一种关联类型,表示一个实体可以与多个其他实体...

    nhibernate-core-3.3.1GA-207-gcd6e862

    这个压缩包文件 "nhibernate-core-3.3.1GA-207-gcd6e862" 包含的是NHibernate核心库的源代码,版本号为3.3.1 GA,具有207个提交的版本,具体Git哈希值为gcd6e862。 **NHibernate 概述** NHibernate 是 .NET 上的一...

    NHibernate-3.0.0GA-bin+reference+src

    在这个名为"NHibernate-3.0.0GA-bin+reference+src"的压缩包中,包含了使用和理解NHibernate 3.0.0版本所需的一切资源。 首先,`NHibernate-3.0.0.GA-bin.zip`文件是NHibernate的二进制发行版,包含运行时库和必要...

    Nhibernate教程 -11个

    **Nhibernate 教程概述** Nhibernate 是一款强大的对象关系映射(ORM)框架,适用于.NET平台。它允许开发人员将数据库模型与面向对象的代码进行解耦,提高了开发效率并降低了维护成本。这个教程集合包含了11个部分...

    NHibernate One-to-Many一对多映射-xxlinux_com

    NHibernate 是一个流行的开源对象关系映射(ORM)框架,用于.NET环境,它允许开发者用高级面向对象的方式处理数据库操作。在数据库世界中,一对多(One-to-Many)关系是一种常见的关联类型,其中一个表(父表)可以...

    NHibernate-3.1.0.GA-bin.zip

    此压缩包"NHibernate-3.1.0.GA-bin.zip"包含了NHibernate 3.1.0 GA版本的组件和相关文档,为开发者提供了使用NHibernate进行数据库操作的基础。 1. **NHibernate简介** NHibernate是.NET平台上的一个流行的ORM工具...

    NHibernate-2.0.0.CR1-bin.zip

    在这个"NHibernate-2.0.0.CR1-bin.zip"压缩包中,我们找到了与NHibernate 2.0.0 CR1版本相关的资源,这标志着一个候选发布版本,可能包含一些预发布的新特性、改进和修复的bug。 1. **NHibernate 概述**: ...

    NHibernate-3.3.2.GA-bin 下载

    在这个“NHibernate-3.3.2.GA-bin”压缩包中,包含了该框架的最新稳定版本,即3.3.2 GA。这个版本在2012年发布,提供了许多改进和修复,使得开发者能够更高效地将业务对象与数据库交互。 1. **ORM框架**:ORM全称为...

    NHibernate.Profiler-Build-895完全破解版

    NHibernate.Profiler-Build-895完全破解版

    NHibernate-2.0.1.GA

    NHibernate 提供了一套完整的映射机制,包括 XML 映射文件(如 nhibernate-mapping.xsd 和 nhibernate-configuration.xsd)和注解方式,来定义对象与数据库表之间的关系。 `nhibernate-mapping.xsd` 文件是 ...

    nhibernate-in-action源代码

    ASP.NET应用中的长时间对话管理是一个挑战,这部分代码展示了如何在Web环境中利用NHibernate管理会话状态。这包括了HttpModule、SessionStateProvider的使用,以及如何处理跨请求的数据持久化,以保持用户会话的...

    NHibernate-3.3.3.SP1-bin.zip

    这个“NHibernate-3.3.3.SP1-bin.zip”压缩包包含了 NHibernate 的 3.3.3 SP1 版本,这是一个稳定且经过广泛测试的版本,提供了对.NET Framework 的全面支持。 **ORM 框架**:ORM(Object-Relational Mapping)框架...

    NHibernate-4.1.1.GA-bin

    【标题】"NHibernate-4.1.1.GA-bin" 指的是 NHibernate 的一个特定版本(4.1.1 GA)的二进制发行包,其中 "GA" 通常代表 "General Availability",意味着这是一个正式发布、稳定可用的版本。NHibernate 是一个开源的...

    NHibernate-5.3.9-bin.zip

    在介绍NHibernate-5.3.9版本之前,我们需要理解ORM的基本概念。ORM是Object-Relational Mapping的缩写,它提供了一种方式来将面向对象的模型与关系数据库进行映射,避免了直接编写SQL语句,提高了代码的可读性和可...

    NHibernate-3.2 源码

    在这个"NHibernate-3.2 源码"压缩包中,包含了一系列文件,让我们深入探讨一下其中的知识点。 1. **默认构建文件** (default.build 和 teamcity.build): 这两个文件是构建脚本,通常用于自动化编译、测试和打包...

    NHibernate-4.0.1.GA-bin

    在"NHibernate-4.0.1.GA-bin"这个压缩包中,包含了一些关键的文件和资料,让我们一一解析它们: 1. **readme.html**:这是标准的安装或项目文件包中包含的文档,通常提供关于如何使用、安装或配置项目的简要指南。...

Global site tag (gtag.js) - Google Analytics