1
+ using System ;
2
+ using System . Linq ;
3
+ using NHibernate . Cfg . MappingSchema ;
4
+ using NHibernate . Linq ;
5
+ using NHibernate . Mapping . ByCode ;
6
+ using NUnit . Framework ;
7
+
8
+ namespace NHibernate . Test . NHSpecificTest . NH3459
9
+ {
10
+ [ TestFixture ]
11
+ public class Fixture : TestCaseMappingByCode
12
+ {
13
+ protected override HbmMapping GetMappings ( )
14
+ {
15
+ var mapper = new ModelMapper ( ) ;
16
+ mapper . Class < Order > ( rc =>
17
+ {
18
+ rc . Table ( "Orders" ) ;
19
+ rc . Id ( x => x . Id , m => m . Generator ( Generators . GuidComb ) ) ;
20
+ rc . Property ( x => x . Name ) ;
21
+ rc . Set ( x => x . OrderLines , m =>
22
+ {
23
+ m . Inverse ( true ) ;
24
+ m . Key ( k =>
25
+ {
26
+ k . Column ( "OrderId" ) ;
27
+ k . NotNullable ( true ) ;
28
+ } ) ;
29
+ m . Cascade ( Mapping . ByCode . Cascade . All . Include ( Mapping . ByCode . Cascade . DeleteOrphans ) ) ;
30
+ m . Access ( Accessor . NoSetter ) ;
31
+ } , m => m . OneToMany ( ) ) ;
32
+ } ) ;
33
+ mapper . Class < OrderLine > ( rc =>
34
+ {
35
+ rc . Table ( "OrderLines" ) ;
36
+ rc . Id ( x => x . Id , m => m . Generator ( Generators . GuidComb ) ) ;
37
+ rc . Property ( x => x . Manufacturer ) ;
38
+ rc . ManyToOne ( x => x . Order , m => m . Column ( "OrderId" ) ) ;
39
+ } ) ;
40
+
41
+ return mapper . CompileMappingForAllExplicitlyAddedEntities ( ) ;
42
+ }
43
+
44
+ protected override void OnSetUp ( )
45
+ {
46
+ using ( var session = OpenSession ( ) )
47
+ using ( var transaction = session . BeginTransaction ( ) )
48
+ {
49
+ var o1 = new Order { Name = "Order 1" } ;
50
+ session . Save ( o1 ) ;
51
+
52
+ var o2 = new Order { Name = "Order 2" } ;
53
+ session . Save ( o2 ) ;
54
+
55
+ session . Save ( new OrderLine { Manufacturer = "AMD" , Order = o2 } ) ;
56
+
57
+ var o3 = new Order { Name = "Order 3" } ;
58
+ session . Save ( o3 ) ;
59
+
60
+ session . Save ( new OrderLine { Manufacturer = "AMD" , Order = o3 } ) ;
61
+ session . Save ( new OrderLine { Manufacturer = "NVIDIA" , Order = o3 } ) ;
62
+ session . Save ( new OrderLine { Manufacturer = "INTEL" , Order = o3 } ) ;
63
+
64
+ transaction . Commit ( ) ;
65
+ }
66
+ }
67
+
68
+ protected override void OnTearDown ( )
69
+ {
70
+ using ( var session = OpenSession ( ) )
71
+ using ( var transaction = session . BeginTransaction ( ) )
72
+ {
73
+ session . Delete ( "from System.Object" ) ;
74
+
75
+ session . Flush ( ) ;
76
+ transaction . Commit ( ) ;
77
+ }
78
+ }
79
+
80
+ [ Test ]
81
+ public void LeftOuterJoinAndGroupBy ( )
82
+ {
83
+ using ( var session = OpenSession ( ) )
84
+ using ( session . BeginTransaction ( ) )
85
+ {
86
+ var result = ( from o in session . Query < Order > ( )
87
+ from ol in o . OrderLines . DefaultIfEmpty ( )
88
+ group ol by ol . Manufacturer into grp
89
+ select new { grp . Key } ) . ToList ( ) ;
90
+
91
+ Assert . AreEqual ( 4 , result . Count ) ;
92
+ }
93
+ }
94
+
95
+ [ Test ]
96
+ public void LeftOuterJoinWithInnerRestrictionAndGroupBy ( )
97
+ {
98
+ using ( var session = OpenSession ( ) )
99
+ using ( session . BeginTransaction ( ) )
100
+ {
101
+ var result = ( from o in session . Query < Order > ( )
102
+ from ol in o . OrderLines . Where ( x => x . Manufacturer == "AMD" ) . DefaultIfEmpty ( )
103
+ group o by o . Name into grp
104
+ select new { grp . Key } ) . ToList ( ) ;
105
+
106
+ Assert . AreEqual ( 3 , result . Count ) ;
107
+ }
108
+ }
109
+
110
+ [ Test ]
111
+ public void LeftOuterJoinWithOuterRestrictionAndGroupBy ( )
112
+ {
113
+ using ( var session = OpenSession ( ) )
114
+ using ( session . BeginTransaction ( ) )
115
+ {
116
+ var result = ( from o in session . Query < Order > ( )
117
+ from ol in o . OrderLines . DefaultIfEmpty ( ) . Where ( x => x . Manufacturer == "AMD" )
118
+ group o by o . Name into grp
119
+ select new { grp . Key } ) . ToList ( ) ;
120
+
121
+ Assert . AreEqual ( 2 , result . Count ) ;
122
+ }
123
+ }
124
+ }
125
+ }
0 commit comments