• 摆弄【Nhibernate 协会制图--导乐陪伴分娩】


    现有两个实体,Dog Master,映射到数据库表中如上图所看到的。一个Dog仅仅同意相应一个Master,但一个Master能够有多个Dog。我们在查询Dog的时候。往往还须要知道其主人Master的信息。也就是说。假设已知一个Dog的信息。想一次来顺藤摸瓜找到Master的信息,此时用Nhibernate怎样去实现呐?这里就用到了多对一的关联映射方法。

    看我是怎样实现的:

     

    Nhibernate的整个搭建过程就不在赘述了。前面的两篇文章都已经具体展示了一下,以下只展示多对一的实现方法。

    首先构建实体类DogMaster

    Master
        public class Master
        {
            private string id;
            private string name;
    
            public Master()
            {
            }
    
            public virtual string Id
            {
                get { return id; }
                set { id = value; }
            }
    
            public virtual string Name
            {
                get { return name; }
                set { name = value; }
    Dog
        public class Dog
        {
            private string id;
            private string name;
            private string sex;
            private string weight;
            private Master master;
    
            public Dog()
            {
            }
    
            public virtual string Id
            {
                get { return id; }
                set { id = value; }
            }
    
            public virtual string Name
            {
                get { return name; }
                set { name = value; }
            }
    
            public virtual string Sex
            {
                get { return sex; }
                set { sex = value; }
            }
    
            public virtual string Weight
            {
                get { return weight; }
                set { weight = value; }
            }
    
            public virtual  Master Master   //这里除了dog的基本属性外,还加入了Master类这个属性
            {
                get{ return master ; } 
                set {  master=value ; } 
            }
    

    继续构建.hbm.xml 

    Master
    <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
        namespace="Model" assembly="Model">
    
      <class name="Master" table="Master">
    
        <id name="Id">
          <column name="MasterId" sql-type="char(32)" />
          <generator class="assigned" />
        </id>
    
        <property name="Name">
          <column name="Name"  sql-type="nvarchar(16)" />
        </property>
    
      </class>
    </hibernate-mapping>
    Dog
    <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
        namespace="Model" assembly="Model">
    
      <class name="Dog" table="Dog" lazy="true">
    
        <id name="Id">
          <column name="DogId" sql-type="char(32)" />
          <generator class="assigned" />
        </id>
    
        <property name="Name">
          <column name="Name"  sql-type="nvarchar(16)" />
        </property>
        
        <property name="Sex"  >
          <column name="Sex" sql-type="nvarchar(16)" />
        </property>
        
        <property name="Weight"  >
          <column name="Weight" sql-type="nvarchar(16)" />
        </property>
    
        <many-to-one name="Master" column="MasterId" />  <!-- 这里多了这个标签,指明相应表中外键“MasterID”相应的是实体Master所相应表记录-->
        
      </class>
    </hibernate-mapping>
    
    client实现

    <span style="font-family:FangSong_GB2312;font-size:14px;"><strong>插入记录</strong></span>
                Master master = new Master();
                master.Id = "masterid";
                master.Name = txtMName.Text.ToString();
                session.Save(master);
    
                Dog prince = new Dog();
                prince.Id = "dogid";
                prince.Name = txtDName .Text .ToString ();
                prince.Sex = txtSex .Text .ToString();
                prince.Weight = txtWeight .Text .ToString ();
                prince.Master = master;
    
    <span style="font-family:FangSong_GB2312;font-size:14px;"><strong>查询记录</strong></span>
                Dog prince = new Dog();
                prince = (Dog)session.Get ("Dog","dogid" );
    
                txtinformation.Text = "赤丸的主人是:"+prince.Master.Name; //查出dog对象的同一时候。其Master的信息也就查了出来。


    这是多对一关联映射的实现。

    关联映射另一对一、一对多、多对多。

    这些映射的出现是为了增强Nhibernate的查询功能。

    PS:

    总结:关联映射旨在进行面向对象的查询时候。可以将与实体相关联的实体信息同一时候载入出来,避免了二次查询,提高了查询的便捷性,使得的面向的对象地操作可以更好覆盖SQL的功能。实体之间的关联关系,另一对一。一对多,多对多。相它可以被设置为相同的关联映射,增强的搜索功能。


    版权声明:本文博主原创文章,博客,未经同意不得转载。

  • 相关阅读:
    Memcached源码分析之memcached.h
    Memcached源码分析之请求处理(状态机)
    Memcached源码分析之线程模型
    Memcached源码分析之从SET命令开始说起
    Memcached源码分析
    jqgrid 获取当前页码
    CSS 居中大全【转】
    判断浏览器是否IE10
    jQuery.validate的this.optional(element)作用
    Java中static、final用法小结
  • 原文地址:https://www.cnblogs.com/blfshiye/p/4792553.html
Copyright © 2020-2023  润新知