1
- ---
2
- layout:
3
- ---
4
- < html > < head >
1
+ < html > < head >
5
2
< meta charset ="utf-8 ">
6
3
< meta name ="viewport " content ="width=device-width, initial-scale=1 " />
7
4
< meta http-equiv ="X-UA-Compatible " content ="IE=edge ">
8
5
< meta http-equiv ="content-type " content ="text/html;charset=utf-8 " />
9
- < title > Chapter 2. Architecture</ title > < link rel ="stylesheet " href ="../shared/css/html.css " type ="text/css "> < meta name ="generator " content ="DocBook XSL Stylesheets V1.65.1 "> < link rel ="home " href ="index.html " title ="NHibernate - Relational Persistence for Idiomatic .NET "> < link rel ="up " href ="index.html " title ="NHibernate - Relational Persistence for Idiomatic .NET "> < link rel ="previous " href ="quickstart.html " title ="Chapter 1. Quickstart with IIS and Microsoft SQL Server "> < link rel ="next " href ="session-configuration.html " title ="Chapter 3. ISessionFactory Configuration "> </ head > < body bgcolor ="white " text ="black " link ="#0000FF " vlink ="#840084 " alink ="#0000FF "> < div class ="navheader "> < table width ="100% " summary ="Navigation header "> < tr > < th colspan ="3 " align ="center "> Chapter 2. Architecture</ th > </ tr > < tr > < td width ="20% " align ="left "> < a accesskey ="p " href ="quickstart.html "> Prev</ a > </ td > < th width ="60% " align ="center "> </ th > < td width ="20% " align ="right "> < a accesskey ="n " href ="session-configuration.html "> Next</ a > </ td > </ tr > </ table > < hr > </ div > < div class ="chapter " lang ="en "> < div class ="titlepage "> < div > < div > < h2 class ="title "> < a name ="architecture "> </ a > Chapter 2. Architecture</ h2 > </ div > </ div > < div > </ div > </ div > {% include google_adsense.html %}< div class ="sect1 " lang ="en "> < div class ="titlepage "> < div > < div > < h2 class ="title " style ="clear: both "> < a name ="architecture-overview "> </ a > 2.1. Overview</ h2 > </ div > </ div > < div > </ div > </ div > < p >
6
+ < title > Chapter 2. Architecture</ title > < link rel ="stylesheet " href ="../shared/css/html.css " type ="text/css "> < meta name ="generator " content ="DocBook XSL Stylesheets V1.65.1 "> < link rel ="home " href ="index.html " title ="NHibernate - Relational Persistence for Idiomatic .NET "> < link rel ="up " href ="index.html " title ="NHibernate - Relational Persistence for Idiomatic .NET "> < link rel ="previous " href ="quickstart.html " title ="Chapter 1. Quick-start with IIS and Microsoft SQL Server "> < link rel ="next " href ="session-configuration.html " title ="Chapter 3. ISessionFactory Configuration "> </ head > < body bgcolor ="white " text ="black " link ="#0000FF " vlink ="#840084 " alink ="#0000FF "> < div class ="navheader "> < table width ="100% " summary ="Navigation header "> < tr > < th colspan ="3 " align ="center "> Chapter 2. Architecture</ th > </ tr > < tr > < td width ="20% " align ="left "> < a accesskey ="p " href ="quickstart.html "> Prev</ a > </ td > < th width ="60% " align ="center "> </ th > < td width ="20% " align ="right "> < a accesskey ="n " href ="session-configuration.html "> Next</ a > </ td > </ tr > </ table > < hr > </ div > < div class ="chapter " lang ="en "> < div class ="titlepage "> < div > < div > < h2 class ="title "> < a name ="architecture "> </ a > Chapter 2. Architecture</ h2 > </ div > </ div > < div > </ div > </ div > < div class ="sect1 " lang ="en "> < div class ="titlepage "> < div > < div > < h2 class ="title " style ="clear: both "> < a name ="architecture-overview "> </ a > 2.1. Overview</ h2 > </ div > </ div > < div > </ div > </ div > < p >
10
7
A (very) high-level view of the NHibernate architecture:
11
8
</ p > < div class ="mediaobject " align ="center "> < img src ="../shared/images/overview.png " align ="middle "> </ div > < p >
12
9
This diagram shows NHibernate using the database and configuration data to
21
18
The "full cream" architecture abstracts the application away from the
22
19
underlying ADO.NET APIs and lets NHibernate take care of the details.
23
20
</ p > < div class ="mediaobject " align ="center "> < img src ="../shared/images/fullcream.png " align ="middle "> </ div > < p >
24
- Heres some definitions of the objects in the diagrams:
21
+ Here are some definitions of the objects in the diagrams:
25
22
26
23
</ p > < div class ="variablelist "> < dl > < dt > < span class ="term "> ISessionFactory (< tt class ="literal "> NHibernate.ISessionFactory</ tt > )</ span > </ dt > < dd > < p >
27
24
A threadsafe (immutable) cache of compiled mappings for a single database.
51
48
(Optional) A single-threaded, short-lived object used by the application to
52
49
specify atomic units of work. Abstracts application from underlying ADO.NET
53
50
transaction. An < tt class ="literal "> ISession</ tt > might span several
54
- < tt class ="literal "> ITransaction</ tt > s in some cases.
51
+ < tt class ="literal "> ITransaction</ tt > s in some cases. Transaction scopes may be used
52
+ instead.
55
53
</ p > </ dd > < dt > < span class ="term "> IConnectionProvider (< tt class ="literal "> NHibernate.Connection.IConnectionProvider</ tt > )</ span > </ dt > < dd > < p >
56
54
(Optional) A factory for ADO.NET connections and commands. Abstracts application
57
- from the concrete vendor-specific implementations of < tt class ="literal "> IDbConnection </ tt >
58
- and < tt class ="literal "> IDbCommand </ tt > . Not exposed to application, but can be
55
+ from the concrete vendor-specific implementations of < tt class ="literal "> DbConnection </ tt >
56
+ and < tt class ="literal "> DbCommand </ tt > . Not exposed to application, but can be
59
57
extended/implemented by the developer.
60
58
</ p > </ dd > < dt > < span class ="term "> IDriver (< tt class ="literal "> NHibernate.Driver.IDriver</ tt > )</ span > </ dt > < dd > < p >
61
59
(Optional) An interface encapsulating differences between ADO.NET providers, such
88
86
The instance was once associated with a persistence
89
87
context, but that context was closed, or the instance
90
88
was serialized to another process. It has a persistent
91
- identity and, perhaps, a corrsponding row in the database.
89
+ identity and, perhaps, a corresponding row in the database.
92
90
For detached instances, NHibernate makes no guarantees
93
91
about the relationship between persistent identity and
94
92
CLR identity.
101
99
Starting with version 1.2, NHibernate added the < tt class ="literal "> ISessionFactory.GetCurrentSession()</ tt >
102
100
method. The processing behind < tt class ="literal "> ISessionFactory.GetCurrentSession()</ tt > is pluggable.
103
101
An extension interface (< tt class ="literal "> NHibernate.Context.ICurrentSessionContext</ tt > ) and a new
104
- configuration parameter (< tt class ="literal "> hibernate. current_session_context_class</ tt > ) have been added
102
+ configuration parameter (< tt class ="literal "> current_session_context_class</ tt > ) have been added
105
103
to allow pluggability of the scope and context of defining current sessions.
106
104
</ p > < p >
107
105
See the API documentation for the < tt class ="literal "> NHibernate.Context.ICurrentSessionContext</ tt >
110
108
tracking the current contextual session. Out-of-the-box, NHibernate comes with several
111
109
implementations of this interface:
112
110
</ p > < div class ="itemizedlist "> < ul type ="disc "> < li > < p >
111
+ < tt class ="literal "> NHibernate.Context.AsyncLocalSessionContext</ tt > - current sessions are tracked
112
+ by current asynchronous flow. You are responsible to bind and unbind an
113
+ < tt class ="literal "> ISession</ tt > instance with static methods of class
114
+ < tt class ="literal "> CurrentSessionContext</ tt > . Binding operations from inner flows will not be
115
+ propagated to outer or siblings flows. Added in NHibernate 5.0.
116
+ </ p > </ li > < li > < p >
113
117
< tt class ="literal "> NHibernate.Context.CallSessionContext</ tt > - current sessions are tracked
114
- by < tt class ="literal "> CallContext</ tt > . You are responsible to bind and unbind an < tt class =" literal " >
115
- ISession</ tt > instance with static methods of class < tt class =" literal " > CurrentSessionContext
116
- </ tt > .
118
+ by < tt class ="literal "> CallContext</ tt > . You are responsible to bind and unbind an
119
+ < tt class =" literal " > ISession</ tt > instance with static methods of class
120
+ < tt class =" literal " > CurrentSessionContext < /tt > .
117
121
</ p > </ li > < li > < p >
118
122
< tt class ="literal "> NHibernate.Context.ThreadStaticSessionContext</ tt > - current session is
119
- stored in a thread-static variable. This context only supports one session factory.
123
+ stored in a thread-static variable. This context supports multiple session factory only
124
+ since NHibernate v5.
120
125
You are responsible to bind and unbind an < tt class ="literal "> ISession</ tt > instance with
121
126
static methods of class < tt class ="literal "> CurrentSessionContext</ tt > .
122
127
</ p > </ li > < li > < p >
123
- < tt class ="literal "> NHibernate.Context.WebSessionContext</ tt > -
124
- stores the current session in < tt class ="literal "> HttpContext</ tt > .
125
- You are responsible to bind and unbind an < tt class ="literal "> ISession</ tt >
126
- instance with static methods of class < tt class ="literal "> CurrentSessionContext</ tt > .
128
+ < tt class ="literal "> NHibernate.Context.WebSessionContext</ tt > -
129
+ stores the current session in < tt class ="literal "> HttpContext</ tt > .
130
+ You are responsible to bind and unbind an < tt class ="literal "> ISession</ tt >
131
+ instance with static methods of class < tt class ="literal "> CurrentSessionContext</ tt > .
127
132
</ p > </ li > < li > < p >
128
133
< tt class ="literal "> NHibernate.Context.WcfOperationSessionContext</ tt > - current sessions are tracked
129
134
by WCF < tt class ="literal "> OperationContext</ tt > . You need to register the < tt class ="literal "> WcfStateExtension</ tt >
130
- extension in WCF. You are responsible to bind and unbind an < tt class ="literal "> ISession
131
- </ tt > instance with static methods of class < tt class ="literal "> CurrentSessionContext</ tt > .
135
+ extension in WCF. You are responsible to bind and unbind an < tt class ="literal "> ISession</ tt >
136
+ instance with static methods of class < tt class ="literal "> CurrentSessionContext</ tt > .
132
137
</ p > </ li > < li > < p >
133
138
< tt class ="literal "> NHibernate.Context.ManagedWebSessionContext</ tt > - current
134
- sessions are tracked by < tt class ="literal "> HttpContext</ tt > . Removed in NHibernate 4.0
135
- - < tt class ="literal "> NHibernate.Context.WebSessionContext</ tt > should be used instead.
136
- You are responsible to bind and unbind an < tt class ="literal "> ISession</ tt > instance with static methods
139
+ sessions are tracked by < tt class ="literal "> HttpContext</ tt > . Removed in NHibernate 4.0
140
+ - < tt class ="literal "> NHibernate.Context.WebSessionContext</ tt > should be used instead.
141
+ You are responsible to bind and unbind an < tt class ="literal "> ISession</ tt > instance with static methods
137
142
on this class, it never opens, flushes, or closes an < tt class ="literal "> ISession</ tt > itself.
138
143
</ p > </ li > </ ul > </ div > < p >
139
- The < tt class ="literal "> hibernate. current_session_context_class</ tt > configuration parameter
144
+ The < tt class ="literal "> current_session_context_class</ tt > configuration parameter
140
145
defines which < tt class ="literal "> NHibernate.Context.ICurrentSessionContext</ tt > implementation
141
146
should be used. Typically, the value of this parameter would just name the implementation
142
147
class to use (including the assembly name); for the out-of-the-box implementations, however,
143
- there are corresponding short names: "call", "thread_static", "web" and "wcf_operation",
148
+ there are corresponding short names: < tt class ="literal "> async_local</ tt > , < tt class ="literal "> call</ tt > ,
149
+ < tt class ="literal "> thread_static</ tt > , < tt class ="literal "> web</ tt > and < tt class ="literal "> wcf_operation</ tt > ,
144
150
respectively.
145
- </ p > </ div > </ div > < div class ="navfooter "> < hr > < table width ="100% " summary ="Navigation footer "> < tr > < td width ="40% " align ="left "> < a accesskey ="p " href ="quickstart.html "> Prev</ a > </ td > < td width ="20% " align ="center "> < a accesskey ="u " href ="index.html "> Up</ a > </ td > < td width ="40% " align ="right "> < a accesskey ="n " href ="session-configuration.html "> Next</ a > </ td > </ tr > < tr > < td width ="40% " align ="left " valign ="top "> Chapter 1. Quickstart with IIS and Microsoft SQL Server </ td > < td width ="20% " align ="center "> < a accesskey ="h " href ="index.html "> Home</ a > </ td > < td width ="40% " align ="right " valign ="top "> Chapter 3. ISessionFactory Configuration</ td > </ tr > </ table > </ div > {% include google_analytics.html %}{% include metrika_yandex_ru.html %} </ body > </ html >
151
+ </ p > </ div > </ div > < div class ="navfooter "> < hr > < table width ="100% " summary ="Navigation footer "> < tr > < td width ="40% " align ="left "> < a accesskey ="p " href ="quickstart.html "> Prev</ a > </ td > < td width ="20% " align ="center "> < a accesskey ="u " href ="index.html "> Up</ a > </ td > < td width ="40% " align ="right "> < a accesskey ="n " href ="session-configuration.html "> Next</ a > </ td > </ tr > < tr > < td width ="40% " align ="left " valign ="top "> Chapter 1. Quick-start with IIS and Microsoft SQL Server </ td > < td width ="20% " align ="center "> < a accesskey ="h " href ="index.html "> Home</ a > </ td > < td width ="40% " align ="right " valign ="top "> Chapter 3. ISessionFactory Configuration</ td > </ tr > </ table > </ div > </ body > </ html >
0 commit comments