@@ -21,18 +21,13 @@ namespace NHibernate.Test.Linq
21
21
{
22
22
using System . Threading . Tasks ;
23
23
using System . Threading ;
24
- using System . Linq . Expressions ;
25
-
26
24
[ TestFixture ( typeof ( EnumType < TestEnum > ) ) ]
27
25
[ TestFixture ( typeof ( EnumStringType < TestEnum > ) ) ]
28
26
[ TestFixture ( typeof ( EnumAnsiStringType < TestEnum > ) ) ]
29
27
public class EnumTestsAsync : TestCaseMappingByCode
30
28
{
31
29
private IType _enumType ;
32
- private ISession _session ;
33
30
34
- private IQueryable < EnumEntity > TestEntities { get ; set ; }
35
- private IQueryable < EnumEntity > TestEntitiesInDb { get ; set ; }
36
31
37
32
public EnumTestsAsync ( System . Type enumType )
38
33
{
@@ -48,7 +43,6 @@ protected override HbmMapping GetMappings()
48
43
rc . Table ( "EnumEntity" ) ;
49
44
rc . Id ( x => x . Id , m => m . Generator ( Generators . Identity ) ) ;
50
45
rc . Property ( x => x . Name ) ;
51
- rc . Property ( x => x . BatchId ) ;
52
46
rc . Property ( x => x . Enum , m => m . Type ( _enumType ) ) ;
53
47
rc . Property ( x => x . NullableEnum , m => m . Type ( _enumType ) ) ;
54
48
rc . ManyToOne ( x => x . Other , m => m . Cascade ( Mapping . ByCode . Cascade . All ) ) ;
@@ -61,43 +55,25 @@ protected override HbmMapping GetMappings()
61
55
protected override void OnSetUp ( )
62
56
{
63
57
base . OnSetUp ( ) ;
64
- _session = OpenSession ( ) ;
65
-
66
- var entities = new [ ] {
67
- new EnumEntity { Enum = TestEnum . Unspecified } ,
68
- new EnumEntity { Enum = TestEnum . Small , NullableEnum = TestEnum . Large } ,
69
- new EnumEntity { Enum = TestEnum . Small , NullableEnum = TestEnum . Medium } ,
70
- new EnumEntity { Enum = TestEnum . Medium , NullableEnum = TestEnum . Medium } ,
71
- new EnumEntity { Enum = TestEnum . Medium , NullableEnum = TestEnum . Small } ,
72
- new EnumEntity { Enum = TestEnum . Medium } ,
73
- new EnumEntity { Enum = TestEnum . Large , NullableEnum = TestEnum . Medium } ,
74
- new EnumEntity { Enum = TestEnum . Large , NullableEnum = TestEnum . Unspecified } ,
75
- new EnumEntity { Enum = TestEnum . Large } ,
76
- new EnumEntity { Enum = TestEnum . Large }
77
- } ;
78
-
79
- var batchId = Guid . NewGuid ( ) ;
80
-
81
- using ( var trans = _session . BeginTransaction ( ) )
58
+ using ( var session = OpenSession ( ) )
59
+ using ( var trans = session . BeginTransaction ( ) )
82
60
{
83
- foreach ( var item in entities )
84
- {
85
- item . BatchId = batchId ;
86
- _session . Save ( item ) ;
87
- }
61
+ session . Save ( new EnumEntity { Enum = TestEnum . Unspecified } ) ;
62
+ session . Save ( new EnumEntity { Enum = TestEnum . Small } ) ;
63
+ session . Save ( new EnumEntity { Enum = TestEnum . Small } ) ;
64
+ session . Save ( new EnumEntity { Enum = TestEnum . Medium } ) ;
65
+ session . Save ( new EnumEntity { Enum = TestEnum . Medium } ) ;
66
+ session . Save ( new EnumEntity { Enum = TestEnum . Medium } ) ;
67
+ session . Save ( new EnumEntity { Enum = TestEnum . Large } ) ;
68
+ session . Save ( new EnumEntity { Enum = TestEnum . Large } ) ;
69
+ session . Save ( new EnumEntity { Enum = TestEnum . Large } ) ;
70
+ session . Save ( new EnumEntity { Enum = TestEnum . Large } ) ;
88
71
trans . Commit ( ) ;
89
72
}
90
-
91
- TestEntitiesInDb = _session . Query < EnumEntity > ( ) . Where ( x => x . BatchId == batchId ) ;
92
- TestEntities = entities . AsQueryable ( ) ;
93
73
}
94
74
95
75
protected override void OnTearDown ( )
96
76
{
97
- if ( _session . IsOpen )
98
- {
99
- _session . Close ( ) ;
100
- }
101
77
using ( var session = OpenSession ( ) )
102
78
using ( var transaction = session . BeginTransaction ( ) )
103
79
{
@@ -132,68 +108,76 @@ public async Task CanQueryOnEnum_Unspecified_1Async()
132
108
await ( CanQueryOnEnumAsync ( TestEnum . Unspecified , 1 ) ) ;
133
109
}
134
110
135
- private async Task CanQueryOnEnumAsync ( TestEnum type , int expectedCount )
111
+ private async Task CanQueryOnEnumAsync ( TestEnum type , int expectedCount , CancellationToken cancellationToken = default ( CancellationToken ) )
136
112
{
137
- var query = await ( TestEntitiesInDb . Where ( x => x . Enum == type ) . ToListAsync ( ) ) ;
113
+ using ( var session = OpenSession ( ) )
114
+ using ( var trans = session . BeginTransaction ( ) )
115
+ {
116
+ var query = await ( session . Query < EnumEntity > ( ) . Where ( x => x . Enum == type ) . ToListAsync ( cancellationToken ) ) ;
138
117
139
- Assert . AreEqual ( expectedCount , query . Count ) ;
118
+ Assert . AreEqual ( expectedCount , query . Count ) ;
119
+ }
140
120
}
141
121
142
122
[ Test ]
143
123
public async Task CanQueryWithContainsOnTestEnum_Small_1Async ( )
144
124
{
145
125
var values = new [ ] { TestEnum . Small , TestEnum . Medium } ;
126
+ using ( var session = OpenSession ( ) )
127
+ using ( var trans = session . BeginTransaction ( ) )
128
+ {
129
+ var query = await ( session . Query < EnumEntity > ( ) . Where ( x => values . Contains ( x . Enum ) ) . ToListAsync ( ) ) ;
146
130
147
- var query = await ( TestEntitiesInDb . Where ( x => values . Contains ( x . Enum ) ) . ToListAsync ( ) ) ;
148
-
149
- Assert . AreEqual ( 5 , query . Count ) ;
131
+ Assert . AreEqual ( 5 , query . Count ) ;
132
+ }
150
133
}
151
134
152
135
[ Test ]
153
136
public async Task ConditionalNavigationPropertyAsync ( )
154
137
{
155
138
TestEnum ? type = null ;
156
-
157
-
158
- await ( TestEntitiesInDb . Where ( o => o . Enum == TestEnum . Large ) . ToListAsync ( ) ) ;
159
- await ( TestEntitiesInDb . Where ( o => TestEnum . Large != o . Enum ) . ToListAsync ( ) ) ;
160
- await ( TestEntitiesInDb . Where ( o => ( o . NullableEnum ?? TestEnum . Large ) == TestEnum . Medium ) . ToListAsync ( ) ) ;
161
- await ( TestEntitiesInDb . Where ( o => ( ( o . NullableEnum ?? type ) ?? o . Enum ) == TestEnum . Medium ) . ToListAsync ( ) ) ;
162
-
163
- await ( TestEntitiesInDb . Where ( o => ( o . NullableEnum . HasValue ? o . Enum : TestEnum . Unspecified ) == TestEnum . Medium ) . ToListAsync ( ) ) ;
164
- await ( TestEntitiesInDb . Where ( o => ( o . Enum != TestEnum . Large
139
+ using ( var session = OpenSession ( ) )
140
+ using ( var trans = session . BeginTransaction ( ) )
141
+ {
142
+ var entities = session . Query < EnumEntity > ( ) ;
143
+ await ( entities . Where ( o => o . Enum == TestEnum . Large ) . ToListAsync ( ) ) ;
144
+ await ( entities . Where ( o => TestEnum . Large != o . Enum ) . ToListAsync ( ) ) ;
145
+ await ( entities . Where ( o => ( o . NullableEnum ?? TestEnum . Large ) == TestEnum . Medium ) . ToListAsync ( ) ) ;
146
+ await ( entities . Where ( o => ( ( o . NullableEnum ?? type ) ?? o . Enum ) == TestEnum . Medium ) . ToListAsync ( ) ) ;
147
+
148
+ await ( entities . Where ( o => ( o . NullableEnum . HasValue ? o . Enum : TestEnum . Unspecified ) == TestEnum . Medium ) . ToListAsync ( ) ) ;
149
+ await ( entities . Where ( o => ( o . Enum != TestEnum . Large
165
150
? ( o . NullableEnum . HasValue ? o . Enum : TestEnum . Unspecified )
166
151
: TestEnum . Small ) == TestEnum . Medium ) . ToListAsync ( ) ) ;
167
152
168
- await ( TestEntitiesInDb . Where ( o => ( o . Enum == TestEnum . Large ? o . Other : o . Other ) . Name == "test" ) . ToListAsync ( ) ) ;
153
+ await ( entities . Where ( o => ( o . Enum == TestEnum . Large ? o . Other : o . Other ) . Name == "test" ) . ToListAsync ( ) ) ;
154
+ }
169
155
}
170
156
171
157
[ Test ]
172
158
public async Task CanQueryComplexExpressionOnTestEnumAsync ( )
173
159
{
174
160
var type = TestEnum . Unspecified ;
175
-
176
- Expression < Func < EnumEntity , bool > > predicate = user => ( user . NullableEnum == TestEnum . Large
177
- ? TestEnum . Medium
178
- : user . NullableEnum ?? user . Enum
179
- ) == type ;
180
-
181
- var query = await ( TestEntitiesInDb . Where ( predicate ) . Select ( entity => new ProjectedEnum
161
+ using ( var session = OpenSession ( ) )
162
+ using ( var trans = session . BeginTransaction ( ) )
182
163
{
183
- Entity = entity ,
184
- Simple = entity . Enum ,
185
- Condition = entity . Enum == TestEnum . Large ? TestEnum . Medium : entity . Enum ,
186
- Coalesce = entity . NullableEnum ?? TestEnum . Medium
187
- } ) . ToListAsync ( ) ) ;
188
-
189
- var targetCount = TestEntities . Count ( predicate ) ; //the truth
190
- Assert . That ( targetCount , Is . GreaterThan ( 0 ) ) ; //test sanity check
191
- Assert . That ( query . Count , Is . EqualTo ( targetCount ) ) ;
192
-
193
- Assert . That ( query , Is . All . Matches < ProjectedEnum > ( x => x . Simple == x . Entity . Enum ) ) ;
194
- Assert . That ( query , Is . All . Matches < ProjectedEnum > ( x => x . Condition == ( x . Entity . Enum == TestEnum . Large ? TestEnum . Medium : x . Entity . Enum ) ) ) ;
195
- Assert . That ( query , Is . All . Matches < ProjectedEnum > ( x => x . Coalesce == ( x . Entity . NullableEnum ?? TestEnum . Medium ) ) ) ;
196
-
164
+ var entities = session . Query < EnumEntity > ( ) ;
165
+
166
+ var query = await ( ( from user in entities
167
+ where ( user . NullableEnum == TestEnum . Large
168
+ ? TestEnum . Medium
169
+ : user . NullableEnum ?? user . Enum
170
+ ) == type
171
+ select new
172
+ {
173
+ user ,
174
+ simple = user . Enum ,
175
+ condition = user . Enum == TestEnum . Large ? TestEnum . Medium : user . Enum ,
176
+ coalesce = user . NullableEnum ?? TestEnum . Medium
177
+ } ) . ToListAsync ( ) ) ;
178
+
179
+ Assert . That ( query . Count , Is . EqualTo ( 1 ) ) ;
180
+ }
197
181
}
198
182
199
183
public class EnumEntity
@@ -205,7 +189,6 @@ public class EnumEntity
205
189
public virtual TestEnum ? NullableEnum { get ; set ; }
206
190
207
191
public virtual EnumEntity Other { get ; set ; }
208
- public virtual Guid BatchId { get ; set ; }
209
192
}
210
193
211
194
public enum TestEnum
@@ -235,13 +218,5 @@ public override string Name
235
218
236
219
public override SqlType SqlType => SqlTypeFactory . GetAnsiString ( 255 ) ;
237
220
}
238
-
239
- private class ProjectedEnum
240
- {
241
- public TestEnum Simple { get ; internal set ; }
242
- public TestEnum Condition { get ; internal set ; }
243
- public TestEnum Coalesce { get ; internal set ; }
244
- public EnumEntity Entity { get ; internal set ; }
245
- }
246
221
}
247
222
}
0 commit comments