zoukankan      html  css  js  c++  java
  • NHibernate的inverse属性

    接触NHibernate不久,今天在级联更新上浪费了很多时间,怎么都没达到主-从表自动更新的效果。网上文章找了一大把,说得都迷迷糊糊,一知半解... 所幸在鄙人再三努力之下,找到一篇好文,特此随笔~!

    inverse属性

    原文:该属性通常存在于双向管理关系中的<set>等列表标签中,其含义是“是否是镜像”的含义。比如在many-to-one双向关联关系中One方的<set>标签中若设置了inverse=true,则表示One方的关系设定只是一个镜像,而该关系的最终生成SQL则完全用Many方决定


     

    光看描述费劲,直接来个实际例子

    这里有三张表

    CompanyDetail

    Institution

    InstitutionHistory

    他们有如下关系:

    CompanyDetail <----(1:n)---- Institution <----(1:n)---- InstitutionHistory

    那么,有了主从关系,我们来看看XML文件里映射关系

    <class name="RecordsDatabase.Entities.CompanyDetail, RecordsDatabase.Entities" table="tblCompanyDetail">
    <bag name="tblInstitutions" inverse="true" lazy="true" cascade="all-delete-orphan">
    <key column="CompanyDetailID"/>
    <one-to-many class="RecordsDatabase.Entities.Institution, RecordsDatabase.Entities"/>
    </bag>
    </class>

    <class name="RecordsDatabase.Entities.Institution, RecordsDatabase.Entities" table="tblInstitution">
    <many-to-one name="CompanyDetail" class="RecordsDatabase.Entities.CompanyDetail, RecordsDatabase.Entities">
    <column name="CompanyDetailID" length="4" sql-type="int" not-null="false"/>
    </many-to-one>
    <bag name="tblMarriageDetails" inverse="true" lazy="true" cascade="all-delete-orphan">
    <key column="InstitutionID"/>
    <one-to-many class="RecordsDatabase.Entities.MarriageDetail, RecordsDatabase.Entities"/>
    </bag>
    </class>

    <class name="RecordsDatabase.Entities.InstitutionHistory, RecordsDatabase.Entities" table="tblInstitutionHistory">
    <bag name="InstitutionMembers" inverse="true" lazy="true" cascade="all-delete-orphan">
    <key column="InstitutionHistoryID"/>
    <one-to-many class="RecordsDatabase.Entities.InstitutionMember, RecordsDatabase.Entities"/>
    </bag>
    </class>

    下面我们要做一个新建操作,那么如何运用NHibernate的级联更新功能呢?我们看下面的代码

    public void SaveInstitution(Institution inst, InstitutionHistory history)
    {
                //DbSession.Transaction.Begin();
    
                CompanyDetail company = inst.CompanyDetail;
    
                inst.InstitutionHistories.Add(history);
    
                company.tblInstitutions.Add(inst);
    
                DbSession.SaveOrUpdate(company);
               
                //DbSession.Transaction.Commit();
    }
    

    如此,就完成了NHibernate的一次级联更新....

    其实鄙人对NHibernate的了解还停留在初级阶段,同志还须继续努力,只因革命尚未成功啊

  • 相关阅读:
    Vim作者创造新编程语言Zimbu
    Google Maps API编程资源大全
    好网收集的地址
    三种模拟自动登录和提交POST信息的实现方法
    解析VMware三种网络连接方式
    PostgreSQL 创建帐号,数据库,权限
    LINUX目录详解
    Linux流媒体服务器安装配置
    用RAMDISK来提高PostgreSQL访问速度
    PostgreSQL 集群复制方案之使用pgq和londiste工具包
  • 原文地址:https://www.cnblogs.com/chenjunsheep/p/1742774.html
Copyright © 2011-2022 走看看