1
- ---
2
- layout:
3
- ---
4
1
< html > < head >
5
- < meta charset ="utf-8 ">
6
- < meta name ="viewport " content ="width=device-width, initial-scale=1 " />
7
- < meta http-equiv ="X-UA-Compatible " content ="IE=edge ">
8
- < 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 >
2
+ < meta http-equiv ="Content-Type " content ="text/html; charset=UTF-8 ">
3
+ < 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
4
A (very) high-level view of the NHibernate architecture:
11
5
</ p > < div class ="mediaobject " align ="center "> < img src ="../shared/images/overview.png " align ="middle "> </ div > < p >
12
6
This diagram shows NHibernate using the database and configuration data to
21
15
The "full cream" architecture abstracts the application away from the
22
16
underlying ADO.NET APIs and lets NHibernate take care of the details.
23
17
</ 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:
18
+ Here are some definitions of the objects in the diagrams:
25
19
26
20
</ p > < div class ="variablelist "> < dl > < dt > < span class ="term "> ISessionFactory (< tt class ="literal "> NHibernate.ISessionFactory</ tt > )</ span > </ dt > < dd > < p >
27
21
A threadsafe (immutable) cache of compiled mappings for a single database.
51
45
(Optional) A single-threaded, short-lived object used by the application to
52
46
specify atomic units of work. Abstracts application from underlying ADO.NET
53
47
transaction. An < tt class ="literal "> ISession</ tt > might span several
54
- < tt class ="literal "> ITransaction</ tt > s in some cases.
48
+ < tt class ="literal "> ITransaction</ tt > s in some cases. Transaction scopes may be used
49
+ instead.
55
50
</ p > </ dd > < dt > < span class ="term "> IConnectionProvider (< tt class ="literal "> NHibernate.Connection.IConnectionProvider</ tt > )</ span > </ dt > < dd > < p >
56
51
(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
52
+ from the concrete vendor-specific implementations of < tt class ="literal "> DbConnection </ tt >
53
+ and < tt class ="literal "> DbCommand </ tt > . Not exposed to application, but can be
59
54
extended/implemented by the developer.
60
55
</ p > </ dd > < dt > < span class ="term "> IDriver (< tt class ="literal "> NHibernate.Driver.IDriver</ tt > )</ span > </ dt > < dd > < p >
61
56
(Optional) An interface encapsulating differences between ADO.NET providers, such
88
83
The instance was once associated with a persistence
89
84
context, but that context was closed, or the instance
90
85
was serialized to another process. It has a persistent
91
- identity and, perhaps, a corrsponding row in the database.
86
+ identity and, perhaps, a corresponding row in the database.
92
87
For detached instances, NHibernate makes no guarantees
93
88
about the relationship between persistent identity and
94
89
CLR identity.
101
96
Starting with version 1.2, NHibernate added the < tt class ="literal "> ISessionFactory.GetCurrentSession()</ tt >
102
97
method. The processing behind < tt class ="literal "> ISessionFactory.GetCurrentSession()</ tt > is pluggable.
103
98
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
99
+ configuration parameter (< tt class ="literal "> current_session_context_class</ tt > ) have been added
105
100
to allow pluggability of the scope and context of defining current sessions.
106
101
</ p > < p >
107
102
See the API documentation for the < tt class ="literal "> NHibernate.Context.ICurrentSessionContext</ tt >
110
105
tracking the current contextual session. Out-of-the-box, NHibernate comes with several
111
106
implementations of this interface:
112
107
</ p > < div class ="itemizedlist "> < ul type ="disc "> < li > < p >
108
+ < tt class ="literal "> NHibernate.Context.AsyncLocalSessionContext</ tt > - current sessions are tracked
109
+ by current asynchronous flow. You are responsible to bind and unbind an
110
+ < tt class ="literal "> ISession</ tt > instance with static methods of class
111
+ < tt class ="literal "> CurrentSessionContext</ tt > . Binding operations from inner flows will not be
112
+ propagated to outer or siblings flows. Added in NHibernate 5.0.
113
+ </ p > </ li > < li > < p >
113
114
< 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 > .
115
+ by < tt class ="literal "> CallContext</ tt > . You are responsible to bind and unbind an
116
+ < tt class =" literal " > ISession</ tt > instance with static methods of class
117
+ < tt class =" literal " > CurrentSessionContext < /tt > .
117
118
</ p > </ li > < li > < p >
118
119
< tt class ="literal "> NHibernate.Context.ThreadStaticSessionContext</ tt > - current session is
119
- stored in a thread-static variable. This context only supports one session factory.
120
+ stored in a thread-static variable. This context supports multiple session factory only
121
+ since NHibernate v5.
120
122
You are responsible to bind and unbind an < tt class ="literal "> ISession</ tt > instance with
121
123
static methods of class < tt class ="literal "> CurrentSessionContext</ tt > .
122
124
</ 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 > .
125
+ < tt class ="literal "> NHibernate.Context.WebSessionContext</ tt > -
126
+ stores the current session in < tt class ="literal "> HttpContext</ tt > .
127
+ You are responsible to bind and unbind an < tt class ="literal "> ISession</ tt >
128
+ instance with static methods of class < tt class ="literal "> CurrentSessionContext</ tt > .
127
129
</ p > </ li > < li > < p >
128
130
< tt class ="literal "> NHibernate.Context.WcfOperationSessionContext</ tt > - current sessions are tracked
129
131
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 > .
132
+ extension in WCF. You are responsible to bind and unbind an < tt class ="literal "> ISession</ tt >
133
+ instance with static methods of class < tt class ="literal "> CurrentSessionContext</ tt > .
132
134
</ p > </ li > < li > < p >
133
135
< 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
136
+ sessions are tracked by < tt class ="literal "> HttpContext</ tt > . Removed in NHibernate 4.0
137
+ - < tt class ="literal "> NHibernate.Context.WebSessionContext</ tt > should be used instead.
138
+ You are responsible to bind and unbind an < tt class ="literal "> ISession</ tt > instance with static methods
137
139
on this class, it never opens, flushes, or closes an < tt class ="literal "> ISession</ tt > itself.
138
140
</ p > </ li > </ ul > </ div > < p >
139
- The < tt class ="literal "> hibernate. current_session_context_class</ tt > configuration parameter
141
+ The < tt class ="literal "> current_session_context_class</ tt > configuration parameter
140
142
defines which < tt class ="literal "> NHibernate.Context.ICurrentSessionContext</ tt > implementation
141
143
should be used. Typically, the value of this parameter would just name the implementation
142
144
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",
145
+ there are corresponding short names: < tt class ="literal "> async_local</ tt > , < tt class ="literal "> call</ tt > ,
146
+ < tt class ="literal "> thread_static</ tt > , < tt class ="literal "> web</ tt > and < tt class ="literal "> wcf_operation</ tt > ,
144
147
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 >
148
+ </ 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