 鲜花( 2)  鸡蛋( 0)
|
current_session_context_class 主要是用来配置当前 data transaction session bind to what) ~/ e; a, ^/ y/ k# \
基本参数:
' n9 A; V2 R) r0 r4 A- d# r. ojta | thread | managed | custom.Class/ s( `6 `4 n. a2 S: x7 d) A
主要是配合6 s+ I6 A7 z2 r4 L+ z% Z4 w
SessionFactory.getCurrentSession() r4 U1 I7 K& T( z1 N
来用的." Z) ]- i, n! E! D4 y
Thread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,
$ b: h. j% ^2 B7 e" x) i- r) hWeb application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:
" A$ W g, o) q5 g L: mcontext.BeginRequest += OpenSession;
, ^% G4 f- G2 O/ }.Bind(HttpContext.Current, SessionFactory.OpenSession())0 h, [4 e5 g. S7 s
; [* B+ }* N- T& e6 L
//do transaction
$ E) S- y, A; j! s3 B6 hgetCurrentSession().Submit();
" l6 P/ ~" e1 n' L! p( v6 TgetCurrentSession().RollBack();& P. C; M) L2 f% ^
...: N/ B& H" E0 Y
Unbind(HttpContext.Current, SessionFactory)2 I& p+ a6 `& Y- l9 M
0 R% I3 Q4 o: \4 ncontext.EndRequest += CloseSession;* Y' h1 o; H* N2 O: _
: c4 x) A" ^" D( q
如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。 |
|