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

流畅的NHibernate - 单元测试一对多*逆*映射

在这个问答内容中,您提到了 NHibernate,这是一个用于 .NET 平台的对象关系映射(ORM)框架。在这个问题中,您提到了单元测试一对多逆映射。

在 NHibernate 中,一对多逆映射是指将一个父实体与多个子实体关联起来。逆映射是指从子实体到父实体的映射。在这种情况下,您需要在子实体中定义一个属性,该属性将引用父实体。

在单元测试中,您需要验证一对多逆映射是否正确工作。为了实现这一点,您可以使用 NHibernate 的 Session 对象来创建和保存实体,并使用查询或加载方法来检索实体并验证它们之间的关系。

在这种情况下,您可以使用以下步骤来执行单元测试:

  1. 创建父实体和子实体的实例。
  2. 将子实体添加到父实体的集合中。
  3. 使用 NHibernate 的 Session 对象保存父实体和子实体。
  4. 使用 NHibernate 的 Session 对象查询或加载父实体和子实体。
  5. 验证父实体和子实体之间的关系是否正确。

以下是一个简单的示例,说明如何在 NHibernate 中执行一对多逆映射的单元测试:

代码语言:csharp
复制
[Test]
public void TestOneToManyMapping()
{
    // 创建父实体和子实体的实例
    ParentEntity parent = new ParentEntity();
    ChildEntity child = new ChildEntity();

    // 将子实体添加到父实体的集合中
    parent.Children.Add(child);

    // 使用 NHibernate 的 Session 对象保存父实体和子实体
    using (ISession session = SessionFactory.OpenSession())
    {
        using (ITransaction transaction = session.BeginTransaction())
        {
            session.Save(parent);
            session.Save(child);
            transaction.Commit();
        }
    }

    // 使用 NHibernate 的 Session 对象查询或加载父实体和子实体
    ParentEntity retrievedParent;
    ChildEntity retrievedChild;
    using (ISession session = SessionFactory.OpenSession())
    {
        using (ITransaction transaction = session.BeginTransaction())
        {
            retrievedParent = session.Get<ParentEntity>(parent.Id);
            retrievedChild = session.Get<ChildEntity>(child.Id);
            transaction.Commit();
        }
    }

    // 验证父实体和子实体之间的关系是否正确
    Assert.AreEqual(retrievedParent, retrievedChild.Parent);
}

在这个示例中,我们创建了一个父实体和一个子实体的实例,并将子实体添加到父实体的集合中。然后,我们使用 NHibernate 的 Session 对象保存父实体和子实体。接下来,我们使用 NHibernate 的 Session 对象查询或加载父实体和子实体,并验证它们之间的关系是否正确。

这个示例演示了如何在 NHibernate 中执行一对多逆映射的单元测试。

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

相关·内容

NHibernate 多对多映射的数据更新

NHibernate 多对多映射的数据更新 最近在用 NHibernate 做多对多更新时突然发现 NHibernate 更新的策略很差, 对多对多关系的更新居然是先全部删除再插入全部数据, 感觉非常奇怪...Tip: Use set for many-to-many associations 发现了解决方案, 将多对多的映射的 bag 改为用 set , 问题终于得到了解决, 改过后的映射如下: Set(...typeof(Role)); map.Column("[RoleId]"); }); } ); 将 UserMapping 和 RoleMapping 中多对多映射全部改为...不只是多对多, 如果你的集合需要更新, NHibernate 推荐的是: 19.5.2....sess.Flush(); 由此可见, bag 在多对多映射更新时性能较差, 如果不需要更新,则可以放心使用, 在需要更新时则 set 是更好的选择。

95210
  • 创建servlet的4个步骤_映射不能一对多还是多对一

    org.apache.catalina.servlets.InvokerServlet 2 二,配置Servlet路径映射配置...: 由于客户端是通过URL地址访问web服务器中的资源,所以Servlet程序若想被外界访问,必须把servlet程序映射到一个URL地址上,这个工作在web.xml文件中使用元素和元素完成。...一个元素用于映射一个已注册的Servlet的一个对外访问路径,它包含有两个子元素:和,分别用于指定Servlet的注册名称和Servlet的对外访问路径。.../* /aaa/bbb/* 3、扩展名匹配:不能以/开始,以开始 例如: .do *.action 优先级:完全匹配 > 目录匹配 > 扩展名匹配 注意: 1)同一个Servlet可以被映射到多个...2)在Servlet映射到的URL中也可以使用通配符,但是只能有两种固定的格式:一种格式是“.扩展名”,另一种格式是以正斜杠(/)开头并以“/*”结尾。

    74710

    Fluent NHibernate之旅(四)-- 关系(上)

    这次的版本发布离RC版只有半个月不到,修正了很多bug,同时补充了大量的功能,在每天更新中,也看到了大量的单元测试,我们相信Fluent NHibernate 已经相对稳定成熟了。...数据库关系 数据库关系一般有: 1、一对一 2、一对多 3、多对多 开始 结合我们前三个系列的示例,我们这一次加一个用户表[User],目的就是存储用户信息所用,再加一个UserDetail,作为用户的详细信息...这是我们简单的一个一对一的设计,我们先只要求实现映射,至于其他的比如延迟加载的,稍后说。先跑起来溜溜。...我们的一对一简单映射也说完了,同时也完成了Component的映射,接下来说说延迟加载 一对一延迟加载 细心的朋友一定会发现我们的output出来的Sql语句,使用的是联合查询,但有时对我们来说,只需要...,却会抛出异常,因为NHibernate不支持one-to-one的Lazy的特性,也就是说NHibernate不支持一对一的延迟加载。

    1.2K60

    NHibernate 代码映射实体类

    NHibernate 代码映射实体类 关于代码映射 NHibernate 3.2 自带了代码映射机制, 作为 xml 映射之外的一种映射方式, 由于推出的时间比较晚, 所以资料相对比较少, 而且与社区版的...下面就通过一个实例来说明怎么使用 NHibernate 自带的代码映射。 实体关系 要映射的类关系图如下: ?...上图中有三个实体类, 他们之间的关系说明如下: Product 与 Store 之间是多对多关系; Store 与 Employee 之间是一对多关系; Employee 与 Store 之间是多对一关系...Cascade.All); map.Column("store_id"); map.ForeignKey("employee_to_store"); } ); 一对多映射...Store 与 Product 两个类之间是多对多映射, 映射代码如下: Store 类的 Products 属性: Bag( m => m.Products, map => {

    91110

    Fluent NHibernate之旅(四)-- 关系(下)

    一、开篇:ISessionFactory Configuration 二、实体映射:Entity Mapping 三、继承映射:Inheritence Mapping 四、一对一映射:One-to-One...Mapping 五、一对多映射:One-to-Many Mapping 场景和数据库设计 前两篇我们介绍了“一对一”和“一对多(多对一)”,或许前两种用的比较多,但多对多的关系,有时候我们也会遇到,...比如我们一直演示的电子商务站,我们的订单和产品的关系,就是一个非常典型的“多对多”。...如果大家先前几篇都看过的话,我觉得应该没有任何问题了,因为Fluent NHibernate 真的很简单,很流畅,代码如下: public class ProductMap : ClassMap的,大家也可以生成hbm来看下多对多的传统的写法。

    726100

    Fluent NHibernate之旅(四)-- 关系(中)

    接着上一篇,我们继续讲解ORM中的关系。在数据库设计中,我们最多打交道的,要算一对多关系了,延续我们的示例,我们来讲解一下一对多的关系。...Mapping 四、一对一映射:One-to-One Mapping 场景和数据库设计 延续我们的演示范例,用户和订单是非常典型的一对多范例。...映射 不得不赞叹一下 Fluent Nhibernate ,有了它,我们的映射一切都变得如此简单,先来看看Model吧,用户的订单列表,对于用户来说,暂时是不需要排序的,所以我们可以使用ISet作为Order...一对多的映射,比起一对一来说还相对的简单点,默认是延迟加载,如果项目中,有些地方,需要立即加载,我们也可以使用 FetchMode.Eager 来加载。...总结 总体来说,一对多的映射比较简单点,不过我们今天只是说了一般的情况,但如果我们遇到级联更新、级联删除等,就会遇到一些问题,在后续文章中会慢慢道来。

    733100

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

    Fluent Nhibernate(以下简称FN)发展到如今,已经相当成熟了,在Nhibernate的书中也相应的推荐了使用FN来进行映射配置,之前写的FN之旅至今还有很多人会来私信我问题,说来惭愧,从...一、开篇:ISessionFactory Configuration 二、实体映射:Entity Mapping 三、继承映射:Inheritence Mapping 四、一对一映射:One-to-One...Mapping 五、一对多映射:One-to-Many Mapping 六、Fluent NHibernate之旅(四)-- 关系(下) 安装 现在在项目中使用FN很方便,使用Nuget管理就可以了...刚我们的测试报错,是因为Employee中的Name是个UserName类,Nhibernate的Component,我在FN之旅四(上)中有介绍到,默认情况下映射根据字段映射到数据库的,所以上面的测试会报错...的一些方法来进行合适的一些配置,如果您要对持久类有一些要求,不对一对多的LazyLoad或者Cascade之类的,您需要通过实现IReferenceConvention,IHasManyConvention

    97760

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

    由于在项目中使用了NHibernate来作为ORMapping构建数据访问层,那么就必须要配置Object和DataTable的映射。...(比如CostCenter中有public virtual long Id{get;set;},对应表中的列COST_CENTER_ID) 对于一对多的关系,使用父方的类名作为属性名,表中使用父表的主键列名作为对应的外键列的列名...对于多对多的关系,把两个类对应的表名进行排序,将小的排前面,然后将两个表名连接起来,中间使用“_”分割。...builder.AddParam("where", string.Format("{0} = '{1}'", TableColumnName, tableName))); } } } 对于3,一对多的情况...instance.EntityType; var childType = instance.ChildType; if (entityType == childType)//这里是专门对自身关联一对多的情况进行特殊处理

    1.1K10

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

    前面的几篇博客反响还不错,但还有一个硬伤,“说了这么多理论,能不能实践?”讲类似概念的文章不算多,但也不少了,但我一直没能从中收获太多的东西,反而更是云里雾里的糊涂了。...简 单的说,通过NHibernate,我们可以在对象和数据库结构中建立关系(映射)。...这个概念我觉得很贴切,就像汽车存放在库房里,我们通过仓库管理员,取出一辆或多辆汽车。这就有“代码映射真实世界”,一种逻辑自洽的感觉;而不是之前,一辆汽车取出十辆汽车的样子。...由于Entity之间复杂的对象关系,其单元测试简直就是一场灾难 Entity的NHMap单元测试。Entity里都没问题了,但你怎么保证Entity的数据库映射时正确的?...只能做单元测试,还是绕不开数据库! 4. Tool BuildDatabase:超级繁琐超级难 其他清理统计工具等 呵呵,原来有这么多坑!

    59990

    NHibernate实践与模式

    NHibernate实践与模式 NHibernate是一款非常优秀的O/R mapping的开源框架,再还没有.net的时候它已经存在于java环境中。...下面我们先看一下它的框架 工作原理 将数据库表结构映射成实体类(xml-mapping文件,实体类 ,class文件),支持一对多,多对一,多对多的关系,默认生成对这些表的CURD操作,包括多表脊联操作...开发环境 Vs.net 2005, NHibernate 1.20(正是版),MyGeneration 1.3。...当然还有很多NHibernate的开发框架大家可以在www.codeproject.com,www.codeplex.com上找到。...然后再去创建数据库表,和UI的部分; 我还是按在有数据表的情况下如何用NHibernate作开发 1.用MyGeneration创建实体类和mapping文件选择NHibernate lujan99 1.06

    81440

    NHibernate介绍「建议收藏」

    C#可用以解决对象/关系数据库映射的工具有多种,常见的有EF (Entity Framework)、NHibernate、iBATIS等,各自的优缺点及适用场景在此不做讨论,本文只对如何使用NHibernate...NHibernate是一个面向.NET环境的对象/关系数据库映射工具。 1. 创建项目文件 在Visual Studio开发工具里创建需要的项目结构。 2....创建NHibernate映射文件 Nhibernate使用XML映射文件来映射POCO到数据库对象。虽然在很多案例中这可能是一对一关系,但这并不是必定的。...class元素表示到单个POCO的映射。name表示上面的程序集和命名空间中的类名,table属性告诉NHibernate数据库中的哪个表或者视图将被映射。...,可以一对一地写一个Repository,专注负责相对应的实体操作。

    76020

    NHibernate联合主键详细示例

    使用NHibernate实现一对多,多对一的关联很是简单,可如果要用复合主键实现确实让人有些淡淡的疼。虽然很淡疼但还是要去抹平这个坑,在下不才,愿意尝试。...实现一对 和 多对一的映射 这步没有多大难度,主要处理好注解的顺序即可,以及OneToMany时联合主键如何设置的问题.示例代码如下: [Bag(0, Name = "Childs", Cascade...,与联合主键共用了一个字段GroupNumber,导致在NHibernate做映射转换的时候会多计算出一个需要填充的值,但SqlParameterCollection中又少一个位置。...(2, Name = "ParentGroupNumber")] public virtual Foo Parent { get; set; } 说明: 1.由于联合外键与联合主键共用了一个字段,导致映射出错...Null 联合主键与联合外键字段不能重复,也不能共用 注意重载的GetHashCode和Equals方法 GetHashCode返回实例的惟一标识 Equals判断是否相同实例的具体实现

    1.5K80

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

    ,MySQL-FRONT ,Connector/Net(选择.Net&Mono) Nhibernate包可以在VS2015中下载 ,对MySql操作,我用的是MySQL-FRONT,注意要想实现和数据库的链接...先写一个简单的给你定义的数据库中添加一条元素的代码:(不使用Nhibernate的) 前提:先把该用的dll文件,添加到引用里面去不然,会连接不成功,之前下载的Connector/Net(选择.Net&...Nhibernate包来实现一个很简单的对数据增删改查的操作,这一次需要用到我们之前下载的Nhibernate包里面的文件,全部dll文件引入之后,“引用”下面应该是这样的: ?...然后我们在工程下面新建两个文件夹:Model文件夹用来存放数据库表类和映射类,还有一个Manger类用来存放对数据库执行增删改查操作的类。....Database("apengchao").Username("root").Password("pc123"))) //使用Mappings将Modle下的类于表进行一一对应

    1.4K30

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

    ORM 是 Object Relational Mapping 的缩写,译为“对象关系映射”,是一种程序设计技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。...ORM是一个对象关系映射器,它负责数据库和编程语言之间的映射。Dapper通过扩展IDbConnection提供一些有用的扩展方法去查询您的数据库。 主要特点:高性能、易排查、易运维、灵活可控。...PgSql 的数组类型等; 支持 丰富的表达式函数,以及灵活的自定义解析; 支持 导航属性一对多、多对多贪婪加载,以及延时加载; 支持 读写分离、分表分库、过滤器、乐观锁、悲观锁; 支持 MySql/...  NHibernate 是一个成熟的开源对象关系映射器,适用于 .NET 框架。...NHibernate社区网站 - https://nhibernate.info GitHub地址:https://github.com/nhibernate/nhibernate-core SmartSql

    5.9K11
    领券