首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

当自连接关系具有其他属性时,NHibernate映射

当自连接关系具有其他属性时,NHibernate映射需要使用<many-to-one>元素来表示自连接关系。这种情况下,需要在映射文件中添加一个<many-to-one>元素,并指定class属性为当前实体类的名称。同时,还需要使用<join>元素来表示自连接关系,并指定table属性为关系表的名称。

以下是一个示例映射文件:

代码语言:xml<hibernate-mapping>
复制
 <class name="MyEntity" table="my_entity">
    <id name="Id" column="id">
     <generator class="native" />
    </id>
   <property name="Name" column="name" />
    <many-to-one name="Parent" class="MyEntity" column="parent_id" />
    <join table="my_entity_relation">
      <key column="entity_id" />
      <many-to-one name="RelatedEntity" class="MyEntity" column="related_entity_id" />
     <property name="RelationType" column="relation_type" />
    </join>
  </class>
</hibernate-mapping>

在这个示例中,MyEntity实体类具有一个自连接关系,其中Parent属性表示父实体,RelatedEntity属性表示关联实体,RelationType属性表示关系类型。<join>元素表示关系表my_entity_relation,其中entity_id列表示当前实体的ID,related_entity_id列表示关联实体的ID,relation_type列表示关系类型。

需要注意的是,在使用<join>元素时,必须使用<key>元素来指定当前实体的ID列。同时,<join>元素中的<many-to-one>元素和<property>元素的name属性必须与实体类中的属性名称相同。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C# 数据操作系列 - 11 NHibernate 配置和结构介绍

一个ADO.NET连接的封装,用来提供ITransaction的工厂。提供了一个通过主键检索对象和导航链接查询对象的一级缓存。也就是EF Core中的导航属性。...实例状态 在NHibernate中,一个可持久化的对象有三种不同的状态,依据与持久化上下文之间的关系不同,其中ISession就是一个持久化上下文。...dialect 数据库方言,表示NHibernate连接的数据库是什么,该用哪种格式解析关系映射到数据库SQL语句 default_schema 默认的schema,用来设置连接字符串连接的数据库默认的...填继承 IConnectionProvider 的实现类 connection.connection_string 数据库连接字符串 connection.connection_string_name...总结 这是一篇枯燥乏味的说明文,主要介绍了Nhibernate的基本内容。下一章我们来试试,如何创建Nhibernate映射配置。

1.2K20

NHibernate 代码映射实体类

下面就通过一个实例来说明怎么使用 NHibernate 自带的代码映射。 实体关系映射的类关系图如下: ?...; 使用代码映射 使用 xml 做实体类映射, 推荐一个实体类对应一个 xml 文件, 用代码映射也推荐这样, 一个实体类对应一个映射类, 一个映射类一个文件。...映射类继承 ClassMapping , T 标识要映射的实体类, 如下所示: public class ProductMapping : ClassMapping {...使用 Property 函数映射属性NHibernate 提供了内置的工具类来简化代码: Property( m => m.Name, map => { map.Column...总结 与 xml 映射以及其它第三方映射相比, 使用 NHibernate 代码映射有下面几个优点: 不需要使用 xml 文件即可完成, 可以充分利用 IDE 智能提示, 重构, 以及编译检查; 与

90110
  • NHibernate详解

    什么是NHibernateNHibernate 是一个基于.Net 的针对关系型数据库的对象持久化类库。...Nhibernate 来源于非常优秀的基于Java的Hibernate 关系型持久化工具。 NHibernate 从数据库底层来持久化你的.Net 对象到关系型数据库。...第二步:产生一个.Net 类文件 内存中有一堆User对象的时候,我们需要某种对象去保存它们。NHibernate通过对象属性的反射来工作,因此我们需要添加我们希望持久化的对象属性。...好了,让我们回到标签id, 你可以猜测到这个标签将是映射数据库表的主键,的确如此,id标签的组成和我们刚才看的property标签是相似的。我们映射属性到目标数据库的字段。...Visual Studio.Net 不会重新编译有改变的映射文件。 第四步:为你的数据库产生一个配置文件 我们至今还没有告诉NHibernate 去哪里连接数据库。

    67030

    2022年了有哪些值得推荐的.NET ORM框架?

    它解决了对象和关系型数据库之间的数据交互问题,ORM的作用是在关系型数据库和业务实体对象之间作一个映射,这样我们在具体的操作业务对象的时候,就不需要再去和复杂的SQL语句打交道,只需简单的操作对象的属性和方法...EntityFramework.Exceptions - 您的SQL查询违反SqlServer,MySql或PostgreSQL中的数据库约束,请对EntityFrameworkCore使用类型化的异常处理...EntityFramework.VersionedProperties -  将对象里每次变更历史自动保存到一个特定的属性里。审计或者做历史版本比较适用。...Dapper Dapper是一个简单的.NET对象映射器,在速度方面具有"King of Micro ORM"的头衔,几乎与使用原始的ADO.NET数据读取器一样快。...  NHibernate 是一个成熟的开源对象关系映射器,适用于 .NET 框架。

    5.9K11

    NHibernate学习笔记之一,Hello world!

    NHibernate是一个面向.NET环境的对象/关系数据库映射框架,主要应用在数据持久层,和其它的ORM框架一样用来把对象模型表示的对象映射到基于SQL的关系模型数据结构中去。...Nhibernate 来源于非常优秀的基于Java的Hibernate 关系型持久化框架。...持久化类的所有的public的属性必须声明为virtual,否则映射不成功。...4、为POCO类编写写一个数据库映射文件,其实User.hbm.xml映射文件包含了对象/关系映射(ORM)所需的元数据。元数据包含持久化类的声明和属性到数据库的映射。...,该文件必须输出到Bin目录中,否则会报错“xxx is not mapped”,如图3所示具体方法是:选择User.hbm.xml文件->属性->生成操作,设置这个属性的值为“嵌入的资源” 图3 5

    59520

    NHibernate教程

    一、NHibernate简介 在今日的企业环境中,把面向对象的软件和关系数据库一起使用可能是相当麻烦、浪费时间的。NHibernate是一个面向.Net环境的对象/关系数据库映射工具。...对象/关系数据库映射(object/relational mapping (ORM))这个术语表示一种技术,用来把对象模型表示的对象映射到基于SQL的关系模型数据结构中去。...NHibernate除了能将一张表映射为一个对象,还可以将表间关系变为对象的属性。例如学生和课程间的多对多关系就可以转化为学生类中的一个课程集合的属性。...NHibernate知道如何完成ORM映射的XML文件; 5.使用NHibernate的API来编程 三、NHibernate的使用 1....可以用Sql语句来创建,也可以用其他方式创建。

    36510

    NHibernate介绍「建议收藏」

    用于开发项目的高级语言(C#、Java等)是面向对象的,而关系型数据库是基于关系的,两者之间的沟通需要一种转换,也就是对象/关系数据库映射(Object/Relational Mapping,简称ORM...C#可用以解决对象/关系数据库映射的工具有多种,常见的有EF (Entity Framework)、NHibernate、iBATIS等,各自的优缺点及适用场景在此不做讨论,本文只对如何使用NHibernate...NHibernate是一个面向.NET环境的对象/关系数据库映射工具。 1. 创建项目文件 在Visual Studio开发工具里创建需要的项目结构。 2....创建NHibernate映射文件 Nhibernate使用XML映射文件来映射POCO到数据库对象。虽然在很多案例中这可能是一对一关系,但这并不是必定的。...class元素表示到单个POCO的映射。name表示上面的程序集和命名空间中的类名,table属性告诉NHibernate数据库中的哪个表或者视图将被映射

    67720

    2022年了有哪些值得推荐的.NET ORM框架?

    它解决了对象和关系型数据库之间的数据交互问题,ORM的作用是在关系型数据库和业务实体对象之间作一个映射,这样我们在具体的操作业务对象的时候,就不需要再去和复杂的SQL语句打交道,只需简单的操作对象的属性和方法...EntityFramework.Exceptions - 您的SQL查询违反SqlServer,MySql或PostgreSQL中的数据库约束,请对EntityFrameworkCore使用类型化的异常处理...EntityFramework.VersionedProperties -  将对象里每次变更历史自动保存到一个特定的属性里。审计或者做历史版本比较适用。...Dapper Dapper是一个简单的.NET对象映射器,在速度方面具有"King of Micro ORM"的头衔,几乎与使用原始的ADO.NET数据读取器一样快。...  NHibernate 是一个成熟的开源对象关系映射器,适用于 .NET 框架。

    3.8K20

    C#——Nhibernate探索

    我们可以分析得出,其中Required_Bins存储的是类库和其他资源;字面的意思Required,是必须文件。 打开Required文件夹,我们看到里面是这样的。 ?...但看到.xsd文件,第一间反应,他们应该是用来帮助开发者,快速生成配置文件用的。为了保险起见,我们上网查询一下。 查询结果: 查询结果是,他们俩是【文件智能提示功能】用的。...调查结果: 对象与数据库的映射是保存在XML文件中的,于是我配置XML映射文件如下。 该XML文件的属性,要求设置其生成操作为【嵌入的资源】。 但我怕它丢失,还给他设置了始终复制的属性。...这句话的意思是,映射我创建的那个类库。 我推断,Nherbinate是读这个配置文件,然后到这个程序集里,反射查询那些poco对象。...结语 这是一场Nhibernate探索之旅,结果是非常顺利的配置成功了。共耗时2小

    48930

    如何使用Fluent Nhibernate中的Automapping进行OR Mapping映射

    由于在项目中使用了NHibernate来作为ORMapping构建数据访问层,那么就必须要配置Object和DataTable的映射。...最早的项目中,我们使用了最传统的XML配置文件的方式编写映射关系,但是这样太麻烦,每次修改class和表都要去修改对应的XML文件,而且还容易出错,一定有疏忽遗漏的地方,还不容易找出错误,所以在第二个项目中...我们只需要定义好映射的规则,就可以不对每个表和类分别编写映射配置,而是按照规则进行自动的Mapping工作。这样在修改class或者DataTable,只需要修改类和表即可,不需要再修改配置文件。...(比如CostCenter中有public virtual long Id{get;set;},对应表中的列COST_CENTER_ID) 对于一对多的关系,使用父方的类名作为属性名,表中使用父表的主键列名作为对应的外键列的列名...对于多对多的关系,把两个类对应的表名进行排序,将小的排前面,然后将两个表名连接起来,中间使用“_”分割。

    1.1K10

    Fluent NHibernate之旅二--Entity Mapping

    本节内容: 简单实体映射 使用自定义类型映射实体属性 NHibernate的实体映射(Entity Mapping)做的非常好,虽然不是完美,但一些我们经常使用的,基本上已经都支持了,而且配置也相对比较简单...今天的内容不涉及关联关系,所以我们今天暂且不说Order。 好了,接下来开始我们的代码演示阶段。...Price,我用了一下,其实不用也是没有关系的,只是做演示。...对于我这种新手来说,Fluent更适合我,因为我可以用它来进行学习NHibernate映射做好了,接下来我们在NHibernate中把映射加到配置中。...二、使用自定义类型映射实体属性 NHibernate支持我们用自定义的类型来映射属性,但因为我是初学,我真的不会,当然我在网上找到了相关的资料,在此也不多说,就说说Fluent的方式吧,在我映射自定义属性的时候

    1K90

    使用VS2015和Nhibernate实现与MySql数据库连接,实现增删改查操作

    先写一个简单的给你定义的数据库中添加一条元素的代码:(不使用Nhibernate的) 前提:先把该用的dll文件,添加到引用里面去不然,会连接不成功,之前下载的Connector/Net(选择.Net&...> x.Id).Column("Id");//主键映射主键 //其他元素我们使用Map来映射 Map(x => x.Name).Column("name...帮助类,使用Nhibernate连接数据库,用来得到sessionFactory,然后使用sessionFactory里面的session去操作数据库,代码如下: using System; using...private static void InitSeeionFactory() { /*Fluently使用它来识别Modle下与数据库中元素的映射关系..._sessionFactory= Fluently.Configure().Database( //连接数据库需要的配置和属性

    1.4K30

    Fluent Nhibernate之旅(五)--利用AutoMapping进行简单开发

    Fluent Nhibernate(以下简称FN)发展到如今,已经相当成熟了,在Nhibernate的书中也相应的推荐了使用FN来进行映射配置,之前写的FN之旅至今还有很多人会来私信我问题,说来惭愧,从...Mapping 五、一对多映射:One-to-Many Mapping 六、Fluent NHibernate之旅(四)-- 关系(下) 安装 现在在项目中使用FN很方便,使用Nuget管理就可以了...说个题外话,NuGet真心不错,至少已经做新项目的时候不用到处去整理lib包了,从NuGet进行下载、更新、卸载都很方便,而且还能搭建自己公司的服务器,不过目前还是有些问题,有时候在下载最新包无法使用的情况下...的原因,EF虽然通过扩展能够支持其他数据库,但我相信用EF使用其他数据库的人很少吧。...刚我们的测试报错,是因为Employee中的Name是个UserName类,Nhibernate的Component,我在FN之旅四(上)中有介绍到,默认情况下映射根据字段映射到数据库的,所以上面的测试会报错

    96060

    架构之路(六):把框架拉出来

    【编者按】本文作者自由飞,具有 传奇般的人生经历: 98年读大学-国际贸易专业 03年11月英语培训机构英语老师 04年2月-05年6月律师事务所实习和公司法务 05年6月-07...从技术层面来讲,我们只能依靠ORM工具了,我用的是NHibernate。简 单的说,通过NHibernate,我们可以在对象和数据库结构中建立关系映射)。...这就有“代码映射真实世界”,一种逻辑洽的感觉;而不是之前,一辆汽车取出十辆汽车的样子。...由于对象间的1:n的关系映射,造成一不小心,就扯出一堆集合数据出来,比如一个Author的所有Article,一个Article的所有Comment、Agree和Disagree。...由于Entity之间复杂的对象关系,其单元测试简直就是一场灾难 Entity的NHMap单元测试。Entity里都没问题了,但你怎么保证Entity的数据库映射正确的?

    58990

    NHibernate 多对多映射的数据更新

    NHibernate 多对多映射的数据更新 最近在用 NHibernate 做多对多更新突然发现 NHibernate 更新的策略很差, 对多对多关系的更新居然是先全部删除再插入全部数据, 感觉非常奇怪...向用户添加或删除角色是, 发现更新的效率特别低, 代码如下: using (var session = sessionFactory.OpenSession()) { var user = session.Query...Tip: Use set for many-to-many associations 发现了解决方案, 将多对多的映射的 bag 改为用 set , 问题终于得到了解决, 改过后的映射如下: Set(...不只是多对多, 如果你的集合需要更新, NHibernate 推荐的是: 19.5.2....sess.Flush(); 由此可见, bag 在多对多映射更新性能较差, 如果不需要更新,则可以放心使用, 在需要更新则 set 是更好的选择。

    94610
    领券