Nhibernate自关联映射


表如下:

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);
           


 

 

转载于:https://www.cnblogs.com/healer_zll/archive/2010/02/26/1674531.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值