首页
学习
活动
专区
工具
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 是更好选择。

94110

创建servlet4个步骤_映射不能一对还是对一

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中也可以使用通配符,但是只能有两种固定格式:一种格式是“.扩展名”,另一种格式是以正斜杠(/)开头并以“/*”结尾。

71810

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

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

89410

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

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

692100

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

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

708100

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类,NhibernateComponent,我在FN之旅四(上)中有介绍到,默认情况下映射根据字段映射到数据库,所以上面的测试会报错...一些方法来进行合适一些配置,如果您要对持久类有一些要求,不对一对LazyLoad或者Cascade之类,您需要通过实现IReferenceConvention,IHasManyConvention

95060

如何使用Fluent NhibernateAutomapping进行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之间复杂对象关系,其单元测试简直就是一场灾难 EntityNHMap单元测试。Entity里都没问题了,但你怎么保证Entity数据库映射时正确?...只能做单元测试,还是绕不开数据库! 4. Tool BuildDatabase:超级繁琐超级难 其他清理统计工具等 呵呵,原来有这么坑!

58290

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

80740

NHibernate介绍「建议收藏」

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

65620

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.8K11
领券