NH表关系多对多分析

nhibernate 表之间的几种关系不易把握,现根据个人学习,总结如下,共同学习,提高,

完整代码参见我的资源[NHibernateTestExampleforSqlServer20110109]

若有错误,请指出,

不甚感谢!

 

a.    实体:

  public class Parent

    {

        public Parent()

        {

            children = new HashedSet();

        }

        private Guid id;

        private ISet children;

 

        public virtual Guid Id

        {

            get { return id; }

            set { id = value; }

        }

 

        public virtual ISet Children

        {

            get { return children; }

            set { children = value; }

        }

}

 

public class Child

    {

        public Child()

        {

        }

        public virtual Guid Id { get; set; }

        public virtual string Name { get; set; }

    }

b.    映射

 

<class name="Parent">

    <id name="Id">

      <generator class="guid" />

    </id>

    <!--完全由parent来控制,因为引入了第三个表ChildSet,所以设置cascade-->

    <!--<set name="Children" table="ChildSet" inverse="false" lazy="true" cascade="all">-->

 

    <!--child来控制,只保存了parent-->

    <!--<set name="Children" table="ChildSet" inverse="true" lazy="true" >-->

 

   

    <!--将保存parent,child,不保存childSet-->

    <set name="Children" table="ChildSet" inverse="true" lazy="true" cascade="all" >

      <key column="parent_id"/>

      <many-to-many class="Child" column="child_id" />

    </set>

  </class>

 

<class name="Child">

    <id name="Id">

      <generator class="guid" />

    </id>

    <property name="Name"/>

  </class>

 

c.    测试代码:

[Test]

        public void CreateInitialDataManytoMany()

        {

            using (ISession session = _sessionFactory.OpenSession())

            using (ITransaction transaction = session.BeginTransaction())

            {

                Parent p1 = new Parent();

                Parent p2 = new Parent();

                Child c1 = new Child();

                c1.Name = "c1";

 

                Child c2 = new Child();

                c2.Name = "c2";

                //one parent two child

                p1.Children.Add(c1);

                p1.Children.Add(c2);

                //two parent one child

                p2.Children.Add(c1);

                session.Save(p1);

                session.Save(p2);

                transaction.Commit();

            }

        }

d.    总结:

Many-to-manny 引入了第三个表childSet,注意cascadeinverse设置不同所产生的效果

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值