NH一对一(双向主键关联映射)

    技术2022-05-20  33

    NH一对一(双向主键关联映射)

     

    概述:

    Nhibernate 表之间的几种关系不易把握,现根据个人学习,进行总结.NH一对一有三种设置方式,分别为:

    单向主键关联映射

      双向主键关联映射

    唯一外键关联映射

    本文以双向主键关联映射作为学习

    a.实体:

        public class Parent

        {

        public Parent()

        {

        Child = new Child();   

        }

        public virtual Guid Id

        {

            get;

            set;

        }

        public virtual Child Child

        {

            get;

            set;

        }

        }

        

        public class Child

        {

        public Child()

        {

        }

        public virtual Guid Id

        {

            get;

            set;

        }

     

        public virtual Parent Parent

        {

            get;

            set;

        }

        }

    b.映射:

        <class name="Parent">

        <id name="Id">

            <generator class="guid" />

            </id>

            <one-to-one  name ="Child" class ="Child" cascade="all" constrained="true">

    </one-to-one>

        </class>

        

        <class name="Child">

            <id name="Id">

            <generator class="guid" />

            </id>   

           <one-to-one  name ="Parent" class=" Parent "/>

        </class>

    c.测试代码:

    [Test]

         public void CreateInitialDataOnetoOne()

         {

        

            using (ISession session = _sessionFactory.OpenSession())

            using (ITransaction transaction = session.BeginTransaction())

            {

                Parent p = new Parent();

                Child c = new Child();

                c.Parent = p;

                p.Child = c;

                session.Save(p);

                transaction.Commit();

            }

        }

     

    public void Selec Child Test() {          using (ISession session = _sessionFactory.OpenSession())

            using (ITransaction transaction = session.BeginTransaction())

            {

                    var Child = session.Get< Child >(1);

                    Console.WriteLine("Child姓名为:{0}"Child.Name);

                    Console.WriteLine("Parent姓名为:{0}"Child. Parent.Name);

               }

        }

    d.总结:

    Child,将会取出Parent.这是因为一对一主键关联映射默认的抓取(fetch)策略是“join

     

     

     

     


    最新回复(0)