10
10
11
11
using System . Collections ;
12
12
using System . Linq ;
13
+ using NHibernate . Cfg ;
13
14
using NHibernate . Intercept ;
14
15
using NHibernate . Tuple . Entity ;
15
16
using NUnit . Framework ;
17
+ using NUnit . Framework . Constraints ;
16
18
using NHibernate . Linq ;
17
19
18
20
namespace NHibernate . Test . LazyProperty
19
21
{
20
22
using System . Threading . Tasks ;
23
+ using System . Threading ;
21
24
[ TestFixture ]
22
25
public class LazyPropertyFixtureAsync : TestCase
23
26
{
@@ -43,6 +46,11 @@ protected override DebugSessionFactory BuildSessionFactory()
43
46
}
44
47
}
45
48
49
+ protected override void Configure ( Configuration configuration )
50
+ {
51
+ configuration . SetProperty ( Environment . GenerateStatistics , "true" ) ;
52
+ }
53
+
46
54
protected override void OnSetUp ( )
47
55
{
48
56
Assert . That (
@@ -58,6 +66,7 @@ protected override void OnSetUp()
58
66
Name = "some name" ,
59
67
Id = 1 ,
60
68
ALotOfText = "a lot of text ..." ,
69
+ Image = new byte [ 10 ] ,
61
70
FieldInterceptor = "Why not that name?"
62
71
} ) ;
63
72
tx . Commit ( ) ;
@@ -122,6 +131,94 @@ public async Task CanGetValueForLazyPropertyAsync()
122
131
}
123
132
}
124
133
134
+ [ Test ]
135
+ public async Task CanSetValueForLazyPropertyAsync ( )
136
+ {
137
+ Book book ;
138
+ using ( ISession s = OpenSession ( ) )
139
+ {
140
+ book = await ( s . GetAsync < Book > ( 1 ) ) ;
141
+ }
142
+
143
+ book . ALotOfText = "text" ;
144
+
145
+ Assert . That ( book . ALotOfText , Is . EqualTo ( "text" ) ) ;
146
+ Assert . That ( NHibernateUtil . IsPropertyInitialized ( book , "ALotOfText" ) , Is . True ) ;
147
+ }
148
+
149
+ [ TestCase ( false ) ]
150
+ [ TestCase ( true ) ]
151
+ public async Task CanUpdateValueForLazyPropertyAsync ( bool initializeAfterSet , CancellationToken cancellationToken = default ( CancellationToken ) )
152
+ {
153
+ Book book ;
154
+ using ( var s = OpenSession ( ) )
155
+ using ( var tx = s . BeginTransaction ( ) )
156
+ {
157
+ book = await ( s . GetAsync < Book > ( 1 , cancellationToken ) ) ;
158
+ book . ALotOfText = "update-text" ;
159
+ if ( initializeAfterSet )
160
+ {
161
+ var image = book . Image ;
162
+ }
163
+
164
+ await ( tx . CommitAsync ( cancellationToken ) ) ;
165
+ }
166
+
167
+ using ( var s = OpenSession ( ) )
168
+ {
169
+ book = await ( s . GetAsync < Book > ( 1 , cancellationToken ) ) ;
170
+ var text = book . ALotOfText ;
171
+ }
172
+
173
+ Assert . That ( NHibernateUtil . IsPropertyInitialized ( book , "ALotOfText" ) , Is . True ) ;
174
+ Assert . That ( NHibernateUtil . IsPropertyInitialized ( book , "Image" ) , Is . True ) ;
175
+ Assert . That ( book . ALotOfText , Is . EqualTo ( "update-text" ) ) ;
176
+ Assert . That ( book . Image , Has . Length . EqualTo ( 10 ) ) ;
177
+ }
178
+
179
+ [ TestCase ( false ) ]
180
+ [ TestCase ( true ) ]
181
+ public async Task UpdateValueForLazyPropertyToSameValueAsync ( bool initializeAfterSet , CancellationToken cancellationToken = default ( CancellationToken ) )
182
+ {
183
+ Book book ;
184
+ string text ;
185
+
186
+ using ( var s = OpenSession ( ) )
187
+ {
188
+ book = await ( s . GetAsync < Book > ( 1 , cancellationToken ) ) ;
189
+ text = book . ALotOfText ;
190
+ }
191
+
192
+ Sfi . Statistics . Clear ( ) ;
193
+
194
+ using ( var s = OpenSession ( ) )
195
+ using ( var tx = s . BeginTransaction ( ) )
196
+ {
197
+ book = await ( s . GetAsync < Book > ( 1 , cancellationToken ) ) ;
198
+ book . ALotOfText = text ;
199
+ if ( initializeAfterSet )
200
+ {
201
+ var image = book . Image ;
202
+ }
203
+
204
+ await ( tx . CommitAsync ( cancellationToken ) ) ;
205
+ }
206
+
207
+ Assert . That ( Sfi . Statistics . EntityUpdateCount , Is . EqualTo ( initializeAfterSet ? 0 : 1 ) ) ;
208
+ Assert . That ( NHibernateUtil . IsPropertyInitialized ( book , "ALotOfText" ) , Is . True ) ;
209
+ Assert . That ( NHibernateUtil . IsPropertyInitialized ( book , "Image" ) , initializeAfterSet ? ( Constraint ) Is . True : Is . False ) ;
210
+ Assert . That ( book . ALotOfText , Is . EqualTo ( text ) ) ;
211
+
212
+ using ( var s = OpenSession ( ) )
213
+ {
214
+ book = await ( s . GetAsync < Book > ( 1 , cancellationToken ) ) ;
215
+ text = book . ALotOfText ;
216
+ }
217
+
218
+ Assert . That ( book . Image , Has . Length . EqualTo ( 10 ) ) ;
219
+ Assert . That ( book . ALotOfText , Is . EqualTo ( text ) ) ;
220
+ }
221
+
125
222
[ Test ]
126
223
public async Task CanGetValueForNonLazyPropertyAsync ( )
127
224
{
0 commit comments