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

看我是怎样实现的:

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

首先构建实体类Dog和Master

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的功能。实体之间的关联关系,另一对一。一对多,多对多。相它可以被设置为相同的关联映射,增强的搜索功能。

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

摆弄【Nhibernate 协会制图--导乐陪伴分娩】的更多相关文章

  1. Nhibernate的Session管理

    参考:http://www.cnblogs.com/renrenqq/archive/2006/08/04/467688.html 但这个方法还不能解决Session缓存问题,由于创建Session需 ...

  2. 以项目谈WebGIS中Web制图的设计和实现

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景介绍 一般WebGIS项目中,前端展示数据的流程基本是先做数据入 ...

  3. "NHibernate.Exceptions.GenericADOException: could not load an entity" 解决方案

     今天,测试一个项目的时候,抛出了这个莫名其妙的异常,然后就开始了一天的调试之旅... 花了很长时间,没有从代码找出任何问题... 那么到底哪里出问题呢? 根据下面那段长长的错误日志: -- ::, ...

  4. nhibernate连接11g数据库

    我框架的数据映射用 nhibernate连接多数据库,这次又增加了oracle11g,负责开发的同事始终连接不上,悲催的sharepoint调试是在不方便... 下面描述下问题的解决,细节问题有3个: ...

  5. 全自动迁移数据库的实现 (Fluent NHibernate, Entity Framework Core)

    在开发涉及到数据库的程序时,常会遇到一开始设计的结构不能满足需求需要再添加新字段或新表的情况,这时就需要进行数据库迁移. 实现数据库迁移有很多种办法,从手动管理各个版本的ddl脚本,到实现自己的mig ...

  6. 跟我学习NHibernate (1)

    引言:Nibernate概述 NHibernate是一个ORM框架,NHibernate是一个把C#对象世界和关系世界数据库之间联系起来的一座桥梁.NHibernate 能自动映射实体模型到数据库,所 ...

  7. 让OData和NHibernate结合进行动态查询

    OData是一个非常灵活的RESTful API,如果要做出强大的查询API,那么OData就强烈推荐了.http://www.odata.org/ OData的特点就是可以根据传入参数动态生成Ent ...

  8. MVC Nhibernate 示例

    首先,非常感谢提出问题的朋友们,使得本人又去深入研究了NHibernate的<Session-Per-Request 模式>.   前言: 谈到NHibernate大伙并不陌生,搞Java ...

  9. Nhibernate mapping 文件编写

    生成工具软件 现在生成工具软件有很多了,例如商业软件:NMG.CodeSmith.Visual NHibernate,开源软件:MyGeneration.NHibernate Modeller.AjG ...

随机推荐

  1. Android中振动器(Vibrator)的使用

    系统获取Vibrator也是调用Context的getSystemService方法,接下来就可以调用Vibrator的方法控制手机振动了.Vibrator只有三个方法控制手机振动: 1.vibrat ...

  2. 日版 Galaxy Note sc05d 涮机

    问题描写叙述:手机已坏.进不了系统 以下提供线涮刷机教程: 1.首先拔掉你的sd卡和sim卡.双清你的手机.可能有些版本号的机油没有双清模式,那就进到设置里边恢复出厂设置,然后关掉你的手机再开机.等到 ...

  3. 再探vim经常使用命令

     最開始学习过vim,见 http://blog.csdn.net/u011848617/article/details/12837873 之后以前不了了之,当再次学习后,发现经常使用命令的掌握还 ...

  4. Oracle Dataguard 介绍

    Oracle DataGuard介绍 一. DataGuard的基本原理 当某次事务处理对生产数据库中的数据作出更改时,Oracle数据库将在一个联机重做日志文件里记录此次更改.在DataGuard中 ...

  5. H264 编解码框架简单介绍

    阅读完H264/AVC 编解码器的介绍,脑海中仅仅是留下下面三条: 1.H264并没有明白规定一个编解码器怎样实现,仅仅是规定了一个编码后的视频比特流的句法,和该比特流的解码方法,这个与MPEG 类似 ...

  6. CSharp Oracle 登陆

    =======后台Oracle存储过程================ 1.创建表 --判读表存在先删除begin    EXECUTE IMMEDIATE 'DROP TABLE student'; ...

  7. Openfire开发配置,Openfire源码配置,OpenFire二次开发配置

    1.下载源码:http://www.igniterealtime.org/downloads/source.jsp 2.把源码解压出的openfire_src目录放至eclipse workplace ...

  8. ProductHunt,TechCrunch和AppStore的差的值

    ProductHunt(产品狩猎)硅谷社区的新产品,起初只存在一个技术性的房子维修.然后进入YC训练营已经收到了几百美元的融资2. 这款产品的形式非常easy.粗产物似乎是一个节目的部位,加上一些评论 ...

  9. 染色法判断是否是二分图 hdu2444

    用染色法判断二分图是这样进行的,随便选择一个点, 1.把它染成黑色,然后将它相邻的点染成白色,然后入队列 2.出队列,与这个点相邻的点染成相反的颜色 根据二分图的特性,相同集合内的点颜色是相同的,即 ...

  10. URAL 1728. Curse on Team.GOV(STL set)

    题目链接:space=1&num=1728" target="_blank">http://acm.timus.ru/problem.aspx?space= ...