NHibernate 慎用Session.Merge】的更多相关文章

Session.Merge其意思有两个步骤, 一般用法: Session.Merge(obj); 1. 从当前的Session中获取obj对象, 如果未获取到则从数据库获取. 2. 把程序中的obj的值赋值给从数据库中获取的值, 意思是说把一个临时对象转换为一个持久化对象.   问题环境: 是在做关系处理的时候,把外键对象做了Merge, 这个时候外键对象发生了变化,同时在transaction commit的时候,也会同时持久化变化的obj对象,造成不想更新的外键对象,却被更新.   解决办法…
NHibernate中Session是线程不安全的,而且每次数据库操作 请求创建Session时对性能有些影响.在Windows应用中可以通过 [ThreadStatic]特性很简单的就可以实现线程安全,而在Web中可以通过将Session与用于请求HttpContext绑定实现线程安全,并且用户当前请求时只有一个Session.代码如下: ISessionManage.cs using System;using NHibernate; namespace Commercial.Jwsoft.F…
Nhibernate的Session和StatelessSession性能比较 作者:Jesai 一个月入30K的大神有一天跟我说:我当年在你现在这个阶段,还在吊儿郎当呢!所以你努力吧! 有时候,一个想法就是1000秒,另一个想法只需要10秒 前言: 近段时间忙着给一个政府机关推送数据到国家数据库,数据量一共加起来有六十几万吧.这么多数据使用人工推送显然是一个不小的工作量,所以必须要使用程序来处理代码.为了方便,我们选择使用Nhibernate框架来进行CURD操作.有人大呼脑残,哈哈哈···为…
今天的工作中遇到一个奇怪的问题,如下: "a different object with the same identifier value was already associated with the session: 19519146" 该异常的上下文如下: 1:在net.tcp绑定的wcf远程调用时产生: 2:通过UI调用方法不会产生该异常. 分析该问题: 由异常信息可以看出,该问题是由于在session.update对一组实体进行更新后,试图将新的实体associate到se…
参考:http://www.cnblogs.com/renrenqq/archive/2006/08/04/467688.html 但这个方法还不能解决Session缓存问题,由于创建Session需要消耗大量的内存,参考上面的方法,当请求并发的时候,内存不断的增加. 在网上找了很多种方法都没有解决.下面贴上主要代码: 1.接口请参考上面文章 using NHibernate; using System; using System.Collections.Generic; using Syste…
摘要 NHibernate的Session的管理涉及到NHibernate的两个最重要的对象ISessionFactory和ISession.ISessionFactory的生成非常消耗资源,通常都在应用程序启动的时候生成,并使用单例模式,被应用程序的所有线程共享.ISession的生成虽然没有ISessionFactory那么消耗资源,但是Session中保存了一级缓存池,如果每次使用到ISession的时候都生成新的ISession对象,而且这样的操作频率很大的时候,也会一定程度上大量消耗内…
使用NHibernate实现一对多,多对一的关联很是简单,可如果要用复合主键实现确实让人有些淡淡的疼.虽然很淡疼但还是要去抹平这个坑,在下不才,愿意尝试. 以示例进入正文,源码下载地址: 一.数据表关系图 很明显,他是一个自引用数表,实现无限级树结构的存储. 二.关键步骤 注解如何实现复合主键 根据官方文档说明,联合主键最好是一个独立的类,需要重载Equals和GetHashCode方法,且标记为可序列化.代码如下: [Serializable] public class BaseInfo {…
我这里主要分成了两个xml来进行spring.net管理实际情况中可自己根据需要进行分类 Dao2.xml <?xml version="1.0" encoding="utf-8" ?> <objects xmlns="http://www.springframework.net" xmlns:db="http://www.springframework.net/database" xmlns:tx=&quo…
重点 NHIbernate处理只读对象的方式可能和你在别处看到的不同.不正确的使用方式可能造成不可预料的结果. 当一个实体是只读的时候: NHIbernate不会对实体的简单属性和单向关联数据检查数据是否是脏数据 NHibernate不会对实体的简单属性和单向关联数据进行更新操作 NHibernate不会更新只读对象的版本信息,尽管实体的简单属性和单向关联数据发生了改变 在某些情况下,NHibernate对待一些只读实体类型和费只读类型是一样的: Nhibernate级联操作定义在实体mappi…
NHibernateSample.Data.Test.QueryHQLFixture.WhereTest: NHibernate.Hql.Ast.ANTLR.QuerySyntaxException : 引发类型为“Antlr.Runtime.NoViableAltException”的异常. near line 1, column 7 [select from   NHibernateSample.Domain.Entities.Customer c where c.Firstname='sc…