1
+ using System . IO ;
2
+ using System . Linq ;
3
+ using System . Runtime . Serialization . Formatters . Binary ;
4
+ using NHibernate . Cfg . MappingSchema ;
5
+ using NHibernate . Linq ;
6
+ using NHibernate . Mapping . ByCode ;
7
+ using NUnit . Framework ;
8
+
9
+ namespace NHibernate . Test . NHSpecificTest . NH3731
10
+ {
11
+ public class ByCodeFixture : TestCaseMappingByCode
12
+ {
13
+ protected override HbmMapping GetMappings ( )
14
+ {
15
+ var mapper = new ModelMapper ( ) ;
16
+ mapper . Class < Parent > ( rc =>
17
+ {
18
+ rc . Id ( x => x . Id , m => m . Generator ( Generators . GuidComb ) ) ;
19
+ rc . Property ( x => x . Name ) ;
20
+ rc . List (
21
+ x => x . Children ,
22
+ c =>
23
+ {
24
+ c . Cascade ( Mapping . ByCode . Cascade . All | Mapping . ByCode . Cascade . DeleteOrphans ) ;
25
+ } ,
26
+ x => x . OneToMany ( )
27
+ ) ;
28
+ } ) ;
29
+ mapper . Class < Child > ( rc =>
30
+ {
31
+ rc . Id ( x => x . Id , m => m . Generator ( Generators . GuidComb ) ) ;
32
+ rc . Property ( x => x . Name ) ;
33
+ } ) ;
34
+
35
+ return mapper . CompileMappingForAllExplicitlyAddedEntities ( ) ;
36
+ }
37
+
38
+ protected override void OnSetUp ( )
39
+ {
40
+ using ( ISession session = OpenSession ( ) )
41
+ using ( ITransaction transaction = session . BeginTransaction ( ) )
42
+ {
43
+ var c1 = new Child { Name = "Child 1" } ;
44
+ var c2 = new Child { Name = "Child 2" } ;
45
+ var c3 = new Child { Name = "Child 3" } ;
46
+
47
+ var p = new Parent { Name = "Parent" } ;
48
+ p . Children . Add ( c1 ) ;
49
+ p . Children . Add ( c2 ) ;
50
+ p . Children . Add ( c3 ) ;
51
+
52
+ session . Save ( p ) ;
53
+
54
+ session . Flush ( ) ;
55
+ transaction . Commit ( ) ;
56
+ }
57
+ }
58
+
59
+ protected override void OnTearDown ( )
60
+ {
61
+ using ( ISession session = OpenSession ( ) )
62
+ using ( ITransaction transaction = session . BeginTransaction ( ) )
63
+ {
64
+ session . Delete ( "from System.Object" ) ;
65
+
66
+ session . Flush ( ) ;
67
+ transaction . Commit ( ) ;
68
+ }
69
+ }
70
+
71
+ [ Test ]
72
+ public void Serializing_Session_After_Reordering_Children_Should_Work ( )
73
+ {
74
+ using ( ISession session = OpenSession ( ) )
75
+ {
76
+ using ( ITransaction transaction = session . BeginTransaction ( ) )
77
+ {
78
+ var p = session . Query < Parent > ( ) . Single ( ) ;
79
+ var c = p . Children . Last ( ) ;
80
+ p . Children . Remove ( c ) ;
81
+ p . Children . Insert ( p . Children . Count - 1 , c ) ;
82
+ session . Flush ( ) ;
83
+ transaction . Commit ( ) ;
84
+ }
85
+
86
+ using ( MemoryStream stream = new MemoryStream ( ) )
87
+ {
88
+ BinaryFormatter formatter = new BinaryFormatter ( ) ;
89
+ formatter . Serialize ( stream , session ) ;
90
+
91
+ Assert . AreNotEqual ( 0 , stream . Length ) ;
92
+ }
93
+ }
94
+ }
95
+
96
+ [ Test ]
97
+ public void Serializing_Session_After_Deleting_First_Child_Should_Work ( )
98
+ {
99
+ using ( ISession session = OpenSession ( ) )
100
+ {
101
+ using ( ITransaction transaction = session . BeginTransaction ( ) )
102
+ {
103
+ var p = session . Query < Parent > ( ) . Single ( ) ;
104
+ p . Children . RemoveAt ( 0 ) ;
105
+ session . Flush ( ) ;
106
+ transaction . Commit ( ) ;
107
+ }
108
+
109
+ using ( MemoryStream stream = new MemoryStream ( ) )
110
+ {
111
+ BinaryFormatter formatter = new BinaryFormatter ( ) ;
112
+ formatter . Serialize ( stream , session ) ;
113
+
114
+ Assert . AreNotEqual ( 0 , stream . Length ) ;
115
+ }
116
+ }
117
+ }
118
+ }
119
+ }
0 commit comments