currently reading articles under nhibernate

【这些年踩过的NH坑】列表

session被污染的问题,暨session与trancation的生命周期问题

nullable列的映射错误问题

乐观锁的问题

n+1问题

fetch导致返回实体重复的问题

lazyload与缓存冲突的问题

生成sql时没有将字符型正确转换为nvarchar,导致非拉丁语系乱码问题

字符串映射为varchar(max)错误导致的4000个英文字符截断问题

fetch,join相遇后导致生成的sql过多join同一张表的性能问题

id为自增列导致的batch执行失效问题

因为字段映射不正确,导致的UTC时间存入数据库后,再读取出来会被默认设置为当前时区的问题

【这些年踩过的NH坑】nullable列不正确的mapping导致的诡异问题

摘要

这个问题最早是由zq同学经过一个非常艰苦的过程发现的,而后来我、bojian、mtt同学一起在另外一个代码库里又遭遇了一回,还好在zq经验的指引下我们第二次很快发现了问题。在项目里,这也算有点黑历史的问题了。

这种defact是因为在.net体系下,关系模型映射到对象模型过程中,对于数据库datetime列空值的不同处理导致的defect。在production环境上往往以伪随机的面貌出现。

如:存在entity b和table b,并且entity b和table b存在映射关系。

entity b中的属性updateDate为datetime类型,而table b对应的列updat......

【这些年踩过的NH坑】不正确的transaction rollback导致的session污染问题

TL;DR

以下内容不含对于带有自增列的表的 insert 操作。

在解决production issue的时候,遇到了一个transaction使用方式不正确,造成了nhibernate的session被污染,导致了大批量正确的操作被rollback。

正确的使用方式是,当transaction rollback了,与这个transaction关联的session立刻被close,而不是继续开新的transaction或者执行其他的数据库操作。

begin session

load all client-people

each client-peopel by loaded

......