@@ -47,6 +47,11 @@ protected override void OnSetUp()
47
47
Id = 1
48
48
} ;
49
49
s . Persist ( wireTransfer ) ;
50
+ var creditCard = new CreditCard
51
+ {
52
+ Id = 2
53
+ } ;
54
+ s . Persist ( creditCard ) ;
50
55
s . Persist ( new Order
51
56
{
52
57
Id = 1 ,
@@ -89,6 +94,71 @@ public async Task CanGetActualValueFromLazyManyToOneAsync()
89
94
}
90
95
}
91
96
97
+ [ Test ]
98
+ public async Task CanGetInitializedLazyManyToOneAfterClosedSessionAsync ( )
99
+ {
100
+ Order order ;
101
+ Payment payment ;
102
+
103
+ using ( var s = OpenSession ( ) )
104
+ {
105
+ order = await ( s . GetAsync < Order > ( 1 ) ) ;
106
+ payment = order . Payment ; // Initialize Payment
107
+ }
108
+
109
+ Assert . That ( order . Payment , Is . EqualTo ( payment ) ) ;
110
+ Assert . That ( order . Payment is WireTransfer , Is . True ) ;
111
+ }
112
+
113
+ [ Test ]
114
+ public async Task InitializedLazyManyToOneBeforeParentShouldNotBeAProxyAsync ( )
115
+ {
116
+ Order order ;
117
+ Payment payment ;
118
+
119
+ using ( var s = OpenSession ( ) )
120
+ {
121
+ payment = await ( s . LoadAsync < Payment > ( 1 ) ) ;
122
+ await ( NHibernateUtil . InitializeAsync ( payment ) ) ;
123
+ order = await ( s . GetAsync < Order > ( 1 ) ) ;
124
+ // Here the Payment property should be unwrapped
125
+ payment = order . Payment ;
126
+ }
127
+
128
+ Assert . That ( order . Payment , Is . EqualTo ( payment ) ) ;
129
+ Assert . That ( order . Payment is WireTransfer , Is . True ) ;
130
+ }
131
+
132
+ [ Test ]
133
+ public async Task SetUninitializedProxyShouldNotTriggerPropertyInitializationAsync ( )
134
+ {
135
+ using ( var s = OpenSession ( ) )
136
+ {
137
+ var order = await ( s . GetAsync < Order > ( 1 ) ) ;
138
+ Assert . That ( order . Payment is WireTransfer , Is . True ) ; // Load property
139
+ Assert . That ( NHibernateUtil . IsPropertyInitialized ( order , "Payment" ) , Is . True ) ;
140
+ order . Payment = await ( s . LoadAsync < Payment > ( 2 ) ) ;
141
+ Assert . That ( NHibernateUtil . IsPropertyInitialized ( order , "Payment" ) , Is . True ) ;
142
+ Assert . That ( NHibernateUtil . IsInitialized ( order . Payment ) , Is . False ) ;
143
+ Assert . That ( order . Payment is WireTransfer , Is . False ) ;
144
+ }
145
+ }
146
+
147
+ [ Test ]
148
+ public async Task SetInitializedProxyShouldNotResetPropertyInitializationAsync ( )
149
+ {
150
+ using ( var s = OpenSession ( ) )
151
+ {
152
+ var order = await ( s . GetAsync < Order > ( 1 ) ) ;
153
+ var payment = await ( s . LoadAsync < Payment > ( 2 ) ) ;
154
+ Assert . That ( order . Payment is WireTransfer , Is . True ) ; // Load property
155
+ Assert . That ( NHibernateUtil . IsPropertyInitialized ( order , "Payment" ) , Is . True ) ;
156
+ await ( NHibernateUtil . InitializeAsync ( payment ) ) ;
157
+ order . Payment = payment ;
158
+ Assert . That ( NHibernateUtil . IsPropertyInitialized ( order , "Payment" ) , Is . True ) ;
159
+ }
160
+ }
161
+
92
162
[ Test ]
93
163
public async Task WillNotLoadGhostPropertyByDefaultAsync ( )
94
164
{
@@ -183,5 +253,18 @@ public async Task AcceptPropertySetWithTransientObjectAsync()
183
253
184
254
Assert . That ( order . Payment , Is . EqualTo ( newPayment ) ) ;
185
255
}
256
+
257
+ [ Test ]
258
+ public async Task WillFetchJoinInSingleHqlQueryAsync ( )
259
+ {
260
+ Order order = null ;
261
+
262
+ using ( ISession s = OpenSession ( ) )
263
+ {
264
+ order = ( await ( s . CreateQuery ( "from Order o left join fetch o.Payment where o.Id = 1" ) . ListAsync < Order > ( ) ) ) [ 0 ] ;
265
+ }
266
+
267
+ Assert . DoesNotThrow ( ( ) => { var x = order . Payment ; } ) ;
268
+ }
186
269
}
187
270
}
0 commit comments