现有两个实体,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. Java调用IIS发布的WebService

    之前的一篇博客说了一个实例,就是用VS2005在IIS上发布WebService.今天我们来实现在Eclipse上用Java来调用昨天发布的WebService. 首先咋在浏览器中输入http://1 ...

  2. 从零開始学android&lt;SeekBar滑动组件.二十二.&gt;

    拖动条能够由用户自己进行手工的调节,比如:当用户须要调整播放器音量或者是电影的播放进度时都会使用到拖动条,SeekBar类的定义结构例如以下所看到的: java.lang.Object    ↳ an ...

  3. HDU 5074-Hatsune Miku(DP)

    Hatsune Miku Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) T ...

  4. 辛星与您使用CSS导航条

    第一步.我们创建了一个新的my.html档.在内容填入如下面.这个html文件不动,直到最后.正是这些内容: <!DOCTYPE html PUBLIC "-//W3C//DTD XH ...

  5. NVL NVL2 NVLIF

    ========Oracle=======NVL (expr1, expr2)->expr1为NULL,返回expr2:不为NULL,返回expr1.注意两者的类型要一致

  6. android中listview分页载入数据

    前段时间做的新浪微博项目一直想实现listview分页载入数据,今天最终实现了,哈哈!感觉挺好的,今天又写了个demo给大家分享下. 首先说下listview的优化方案,这也是面试中常考的题目.优化方 ...

  7. oracle spfile和pfile文件(转)

    --======================== -->Oracle 参数文件 --======================== /* 参数文件(10g中的参数文件) 主要用来记录数据库 ...

  8. servlet 实现下载文件

    servlet: public class UpAndDownServlet extends HttpServlet { public void doPost(HttpServletRequest r ...

  9. java线程例子登山

    Through its implementation, this project will familiarize you with the creation and execution of thr ...

  10. Java EE (7) -- Java EE 6 Enterprise Architect Certified Master(1z0-807)

    Application Design Concepts and Principles Identify the effects of an object-oriented approach to sy ...