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的了解还停留在初级阶段,同志还须继续努力,只因革命尚未成功啊

转载于:https://www.cnblogs.com/chenjunsheep/archive/2010/05/24/1742774.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值