1
+ using System ;
2
+ using System . Collections . Generic ;
3
+ using System . Diagnostics ;
4
+ using System . Globalization ;
5
+ using System . Linq ;
6
+ using NHibernate . Cfg ;
7
+ using NHibernate . Cfg . MappingSchema ;
8
+ using NHibernate . Mapping . ByCode ;
9
+ using NUnit . Framework ;
10
+ using Environment = NHibernate . Cfg . Environment ;
11
+
12
+ namespace NHibernate . Test . NHSpecificTest . NH3489
13
+ {
14
+ [ TestFixture ]
15
+ [ Ignore ( "Only run to test performance." ) ]
16
+ public class Fixture : TestCaseMappingByCode
17
+ {
18
+ private const int batchSize = 900 ;
19
+
20
+ protected override HbmMapping GetMappings ( )
21
+ {
22
+ var mapper = new ModelMapper ( ) ;
23
+ mapper . Class < Order > ( cm =>
24
+ {
25
+ cm . Id ( x => x . Id , m => m . Generator ( Generators . HighLow ) ) ;
26
+ cm . Table ( "Orders" ) ;
27
+ cm . Property ( x => x . Name ) ;
28
+ cm . Set ( x => x . Departments , m =>
29
+ {
30
+ m . Table ( "Orders_Departments" ) ;
31
+ m . Key ( k =>
32
+ {
33
+ k . Column ( "OrderId" ) ;
34
+ k . NotNullable ( true ) ;
35
+ } ) ;
36
+ m . BatchSize ( batchSize ) ;
37
+ m . Cascade ( Mapping . ByCode . Cascade . All ) ;
38
+ } , r => r . ManyToMany ( c => c . Column ( "DepartmentId" ) ) ) ;
39
+ } ) ;
40
+
41
+ mapper . Class < Department > ( cm =>
42
+ {
43
+ cm . Id ( x => x . Id , m => m . Generator ( Generators . HighLow ) ) ;
44
+ cm . Table ( "Departments" ) ;
45
+ cm . Set ( x => x . Orders , m =>
46
+ {
47
+ m . Table ( "Orders_Departments" ) ;
48
+ m . Key ( k =>
49
+ {
50
+ k . Column ( "DepartmentId" ) ;
51
+ k . NotNullable ( true ) ;
52
+ } ) ;
53
+ m . BatchSize ( batchSize ) ;
54
+ m . Cascade ( Mapping . ByCode . Cascade . All ) ;
55
+ m . Inverse ( true ) ;
56
+ } , r => r . ManyToMany ( c => c . Column ( "OrderId" ) ) ) ;
57
+ } ) ;
58
+
59
+ return mapper . CompileMappingForAllExplicitlyAddedEntities ( ) ;
60
+ }
61
+
62
+ protected override void Configure ( Configuration configuration )
63
+ {
64
+ base . Configure ( configuration ) ;
65
+ configuration . SetProperty ( Environment . BatchSize , batchSize . ToString ( CultureInfo . InvariantCulture ) ) ;
66
+ }
67
+
68
+ protected override void OnSetUp ( )
69
+ {
70
+ using ( ISession session = OpenSession ( ) )
71
+ using ( ITransaction transaction = session . BeginTransaction ( ) )
72
+ {
73
+ var department1 = new Department { Name = "Dep 1" } ;
74
+ session . Save ( department1 ) ;
75
+ var department2 = new Department { Name = "Dep 2" } ;
76
+ session . Save ( department2 ) ;
77
+
78
+ for ( int i = 0 ; i < 10000 ; i ++ )
79
+ {
80
+ var order = new Order { Name = "Order " + ( i + 1 ) } ;
81
+ order . Departments . Add ( department1 ) ;
82
+ order . Departments . Add ( department2 ) ;
83
+ session . Save ( order ) ;
84
+ }
85
+
86
+ session . Flush ( ) ;
87
+ transaction . Commit ( ) ;
88
+ }
89
+ }
90
+
91
+ protected override void OnTearDown ( )
92
+ {
93
+ using ( ISession session = OpenSession ( ) )
94
+ using ( ITransaction transaction = session . BeginTransaction ( ) )
95
+ {
96
+ session . Delete ( "from System.Object" ) ;
97
+
98
+ session . Flush ( ) ;
99
+ transaction . Commit ( ) ;
100
+ }
101
+ }
102
+
103
+ protected override string CacheConcurrencyStrategy
104
+ {
105
+ get { return null ; }
106
+ }
107
+
108
+ [ Test ]
109
+ public void PerformanceTest ( )
110
+ {
111
+ Stopwatch stopwatch = Stopwatch . StartNew ( ) ;
112
+ using ( ISession session = OpenSession ( ) )
113
+ using ( session . BeginTransaction ( ) )
114
+ {
115
+ IList < Order > orders = session . QueryOver < Order > ( ) . List ( ) ;
116
+ foreach ( Order order in orders )
117
+ order . Departments . ToList ( ) ;
118
+ }
119
+ stopwatch . Stop ( ) ;
120
+ Console . WriteLine ( stopwatch . Elapsed ) ;
121
+ }
122
+ }
123
+ }
0 commit comments