一页孤舟

学海无涯

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::


表如下:

CREATE TABLE [dbo].[Category](
    [Id] [int] IDENTITY(1,1) NOT NULL primary key,
    [CategoryName] [varchar](254) COLLATE Chinese_PRC_CI_AS NOT NULL,
    [ParentId] [int] NULL)

ALTER TABLE [dbo].[Category]  WITH CHECK ADD  CONSTRAINT [fk_category] FOREIGN KEY([ParentId])
REFERENCES [dbo].[Category] ([Id])

说明:category是一个无限分类表,其外键parentid引用自己的主键。

 

应用场合:产品分类,公司组织树等所有需要树数据结构的地方。在没有应用Nhibernate之前,想必需要大费一番周折把。

有了NHibernate,一切简单多了。

 

xml映射代码:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
   assembly="NHibernateSample.Domain"
   namespace="NHibernateSample.Domain.Entities" >
  <class name="Category" table="Category">
    <id name="Id"  type="Int32">
      <generator class="native"></generator>
    </id>
    <many-to-one column="ParentId" class="Category" name="ParentCategory" cascade="save-update" ></many-to-one>
    <property name="CategoryName" type="String" not-null="true"></property>
    <set name="ChildCategories"  cascade="save-update" inverse="true">
      <key column="ParentId"></key>
      <one-to-many class="Category"/>
    </set>
  </class>
</hibernate-mapping>

 

 实体类:

  public class Category
    {
        public virtual int? Id {private  set;  get; }
        public virtual string CategoryName { set; get; }
        private ISet<Category> childCategories = new HashedSet<Category>();
        public virtual ISet<Category> ChildCategories
        {
            get { return childCategories; }
            set { childCategories = value; }
        }
        public virtual Category ParentCategory { set; get; }
    }

 访问代码:
                Category c1 = new Category();
                c1.CategoryName = "学校1";
                Category c2 = new Category();
                c2.CategoryName = "学校2";
                Category c3 = new Category();
                c3.CategoryName = "院系1";
                Category c4 = new Category();
                c4.CategoryName = "院系2"; 

               c1.ChildCategories.Add(c3);
               c3.ParentCategory = c1;
                c2.ChildCategories.Add(c4);
               c4.ParentCategory = c2;
                session.Save(c1);
                session.Save(c2);
           


 

 

posted on 2010-02-26 20:30  LinLi  阅读(471)  评论(0编辑  收藏  举报