NHibernate测试的几个小问题
在使用NHibernate时,我发现有许多陷阱,看似微不足道,如果不明白,就会阻碍我们的开发,乃至于影响到开发效率,成为开发的拦路虎。
1、首先是映射的实体类,例如Customer类。由于我采用DDD的方式,将领域逻辑也放入到该实体类中,且通过构造函数传入了一个Repository对象,代码如下:
????private ICustomerRepository m_repository;
????public virtual int CustomerID {
????????get;
????????set;
????}
????public virtual string Name {
????????get;
????????set;
????}
????public virtual DateTime Birthday {
????????get;
????????set;
????}
????public virtual string Address {
????????get;
????????set;
????}
????public Customer(ICustomerRepository repository) {
????????m_repository = repository;
????}
????public Customer Load(int customerID) {
????????return m_repository.Load(customerID);
????}
}
这样的定义会导致无法进行Mapping,会抛出NHibernate.InvalidProxyTypeException异常。原因在于如果实体类定义了一个带参的构造函数,则必须显式地定义一个无参的构造函数。此外,定义在Customer类中的方法,同样必须加上virtual关键字。
}
public virtual Customer Load(int customerID) {
????return m_repository.Load(customerID);
}
2、如果使用Visual Studio Team Suite自带的测试框架,则会带来无法找到hibernate.cfg.xml文件的问题。在一般的测试框架下,我们可以将该文件的Copy to output directory属性设置为“copy always”即可。但由于VSTS自带的测试框架会将相关文件放到自动生成的TestResult下的临时文件夹中。因此,可能会抛出如下的异常:
NHibernate.Cfg.HibernateConfigException: An exception occurred during configuration of persistence layer. ---> System.IO.DirectoryNotFoundException: 未能找到路径“C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\PublicAssemblies;PrivateAssemblies\hibernate.cfg.xml”的一部分。
一个简单的解决方案时将hibernate.cfg.xml拷贝到TestResult目录下,并将构建SessionFactory对象的方法修改为:
好在这只是为了测试而做,所以方案变得如此丑陋,也是可以接受的。
3、关于hbm文件。一般来说,我们需要将实体对象的hbm文件例如customer.hbm.xml文件的Build Action属性设置为Embedded Resource即可。若要验证该属性的设置是否生效,可以通过Reflector查看该程序集下的Resource。如下图:
然而,如果hibernate.cfg.xml的设置有错,仍然会抛出如下异常:NHibernate.MappingException : No persister for: DomainLayer.Entities.Customer。
我们需要在hibernate.cfg.xml文件中增加<mapping>:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory name="NHibernate.Test">
<property name="connection.driver_class">
NHibernate.Driver.SqlClientDriver
</property>
<property name="connection.connection_string">
Data Source=.\SQLEXPRESS;Initial Catalog=EBusiness;
Integrated Security=True;Pooling=False
</property>
<property name="adonet.batch_size">10</property>
<property name="show_sql">true</property>
<property name="dialect">
NHibernate.Dialect.MsSql2005Dialect
</property>
<property name="use_outer_join">true</property>
<property name="command_timeout">60</property>
<property name="query.substitutions">
true 1, false 0, yes 'Y', no 'N'
</property>
<property name="proxyfactory.factory_class">
NHibernate.ByteCode.Castle.ProxyFactoryFactory,
NHibernate.ByteCode.Castle
</property>
<mapping assembly="DomainLayer"/>
</session-factory>
</hibernate-configuration>
本文转自wayfarer51CTO博客,原文链接:http://blog.51cto.com/wayfarer/310549,如需转载请自行联系原作者
NHibernate测试的几个小问题相关推荐
- 趣味小测试.C-Golang-Python的性能小对比
趣味小测试.C-Golang-Python的性能小对比 采用三种语言执行经典的求素数. 求输入一个数,求出这个数以内的所有素数.并打印个数 注 1.此处并未采用算法来优化 2.Golang未使用协程, ...
- 用Java测试电脑速度的小方法
Java测试电脑速度的小方法 用System类中的currentTimeMillis()方法 public static long currentTimeMillis() 返回当前时间(以毫秒为单位) ...
- 从零开始自制实现WebServer(十八)---- 对服务器做最后的压力测试 WebBench压测小工具 项目迎来终章
文章目录 全流程实现博客链接 前引 (十八)---- 对服务器做最后的压力测试 WebBench压测小工具 项目迎来终章 1.正确处理Vmware-Station 处理器设置(初步调试过程) 2.正确 ...
- 实用的智力测试智商提升微信小程序源码下载
这是一个考验智力,心里上面的一个测试游戏 支持多种测试方法比如有: 智商测试丨情商测试 性格测试丨爱情测试 抑郁症测试丨焦虑症测试 心理压力测试丨生活满意度测试 通过不同的测试,来检查你的智力,情商等 ...
- 小程序源码:实用的智力测试智商提升微信小程序-多玩法安装简单
这是一个考验智力,心里上面的一个测试游戏 支持多种测试方法比如有: 编辑 通过发行自己的不住来弥补自己的不足 所以这就是为什么小编会说是一个实用的小程序 另外也是支持流量主模式的,大家自己到时候替 ...
- 测试/开发程序员小张相亲记......
目录:导读 前言 一.Python编程入门到精通 二.接口自动化项目实战 三.Web自动化项目实战 四.App自动化项目实战 五.一线大厂简历 六.测试开发DevOps体系 七.常用自动化测试工具 八 ...
- NHibernate 状态的概念 以及 小测试
在 NHibernate中有三种状态. 临时态(Transient):用new创建的对象,它没有持久化,没有纳入Session中,随时可以被垃圾回收,处于此状态的对象叫临时对象.特点:数据库中没有与之 ...
- 测试方案_何小伟:ABTest测试方案
一.什么是ABTest测试 ABTest的目的和意图是判断哪种种UI或rerank策略更优,通过事实的依据( CTR或下单率/成交量.....)判断哪种策略更符合用户的习惯和需求,多用于产品发布时的最 ...
- c++指定在某一线程运行_iPhone11升级iOS14运行速度测试:结果有点小惊喜
苹果已经发布了iOS14测试版,不知道各位果粉有没有第一时间升级体验新功能.之前给大家测试了几款旧iPhone升级后的运行速度表现,结果令人失望.而今天就单独对iPhone11来一次测试,升级iOS1 ...
最新文章
- R语言使用beanplot包绘制豆荚图实战:与箱图、小提琴图对比、绘制不对称的豆荚图
- vim 忽略大小写查找字符串
- 为什么要叫python-为什么我们要学习Python?
- Python基础数据类型之set集合
- LoadRunner脚本增强技巧之检查点
- python入门——P36类和对象:给大家介绍对象
- mockito无效_Mockito模拟无效方法
- mysql与oracle存储过程_MySQL与Oracle差异比较之五存储过程Function
- pycharm中的常用快捷键与常用设置
- JavaScript面向对象轻松入门之概述(demo by ES5、ES6、TypeScript)
- 均方根值、均方根误差以及标准差的区别
- RoadMap:面向自动驾驶视觉定位的轻量级语义地图(ICRA2021)
- com.baomidou.mybatisplus.core.exceptions.MyBatisPlusException: java.net.UnknownHostException
- 清除node_modules 缓存
- 【论文投稿】Hindawi旗下4区Mobile Information Systems(misy)投稿详细步骤
- 你的电脑遇到问题,需要重新启动的解决思路
- 【经验】怎么把Word文字下面的红线去掉?
- export / import与module.exports/require的关系与用法
- SKU110K商品检测数据集处理
- 八道超经典指针面试题(三千字详解)
热门文章
- 中科院陈玉福算法设计与分析 动态规划矩阵连乘计算问题
- Leetcode 503:下一个更大元素 II(超详细的解法!!!)
- 51单片机最小系统制作笔记
- SV学习笔记—随机化约束的概率
- 四大组件以及 Application和Context的全面理解
- 分享147个ASP源码,总有一款适合您
- 西安交大城市学院计算机怎么,西安交大城市学院计算机系在“量子计算机”教研领域获得显著进展...
- 电脑一打开计算机硬盘就嗡嗡,电脑主机嗡嗡响 怎么解决?
- 专访 Zipkin 项目 Leader:如何用 Zipkin 做好分布式追踪?
- as死机了怎么办_电脑老出现Dllc:windowssystem32asadhip.dll而且老死机怎么处理、高手求救...