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 ( x => x . ChildrenList , c => c . Cascade ( Mapping . ByCode . Cascade . All | Mapping . ByCode . Cascade . DeleteOrphans ) , x => x . OneToMany ( ) ) ;
21
+ rc . Map ( x => x . ChildrenMap , c => c . Cascade ( Mapping . ByCode . Cascade . All | Mapping . ByCode . Cascade . DeleteOrphans ) , x => x . OneToMany ( ) ) ;
22
+ } ) ;
23
+ mapper . Class < ListChild > ( rc =>
24
+ {
25
+ rc . Id ( x => x . Id , m => m . Generator ( Generators . GuidComb ) ) ;
26
+ rc . Property ( x => x . Name ) ;
27
+ } ) ;
28
+ mapper . Class < MapChild > ( rc =>
29
+ {
30
+ rc . Id ( x => x . Id , m => m . Generator ( Generators . GuidComb ) ) ;
31
+ rc . Property ( x => x . Name ) ;
32
+ } ) ;
33
+
34
+ return mapper . CompileMappingForAllExplicitlyAddedEntities ( ) ;
35
+ }
36
+
37
+ protected override void OnSetUp ( )
38
+ {
39
+ using ( ISession session = OpenSession ( ) )
40
+ using ( ITransaction transaction = session . BeginTransaction ( ) )
41
+ {
42
+ var p = new Parent { Name = "Parent" } ;
43
+ p . ChildrenList . Add ( new ListChild { Name = "ListChild 1" } ) ;
44
+ p . ChildrenList . Add ( new ListChild { Name = "ListChild 2" } ) ;
45
+ p . ChildrenList . Add ( new ListChild { Name = "ListChild 3" } ) ;
46
+ p . ChildrenMap . Add ( "first" , new MapChild { Name = "MapChild 1" } ) ;
47
+ p . ChildrenMap . Add ( "second" , new MapChild { Name = "MapChild 2" } ) ;
48
+ p . ChildrenMap . Add ( "third" , new MapChild { Name = "MapChild 3" } ) ;
49
+
50
+ session . Save ( p ) ;
51
+
52
+ session . Flush ( ) ;
53
+ transaction . Commit ( ) ;
54
+ }
55
+ }
56
+
57
+ protected override void OnTearDown ( )
58
+ {
59
+ using ( ISession session = OpenSession ( ) )
60
+ using ( ITransaction transaction = session . BeginTransaction ( ) )
61
+ {
62
+ session . Delete ( "from System.Object" ) ;
63
+
64
+ session . Flush ( ) ;
65
+ transaction . Commit ( ) ;
66
+ }
67
+ }
68
+
69
+ [ Test ]
70
+ public void Serializing_Session_After_Reordering_ChildrenList_Should_Work ( )
71
+ {
72
+ using ( ISession session = OpenSession ( ) )
73
+ {
74
+ using ( ITransaction transaction = session . BeginTransaction ( ) )
75
+ {
76
+ var p = session . Query < Parent > ( ) . Single ( ) ;
77
+ var c = p . ChildrenList . Last ( ) ;
78
+ p . ChildrenList . Remove ( c ) ;
79
+ p . ChildrenList . Insert ( p . ChildrenList . Count - 1 , c ) ;
80
+ session . Flush ( ) ;
81
+ transaction . Commit ( ) ;
82
+ }
83
+
84
+ using ( MemoryStream stream = new MemoryStream ( ) )
85
+ {
86
+ BinaryFormatter formatter = new BinaryFormatter ( ) ;
87
+ formatter . Serialize ( stream , session ) ;
88
+
89
+ Assert . AreNotEqual ( 0 , stream . Length ) ;
90
+ }
91
+ }
92
+ }
93
+
94
+ [ Test ]
95
+ public void Serializing_Session_After_Deleting_First_Child_In_List_Should_Work ( )
96
+ {
97
+ using ( ISession session = OpenSession ( ) )
98
+ {
99
+ using ( ITransaction transaction = session . BeginTransaction ( ) )
100
+ {
101
+ var p = session . Query < Parent > ( ) . Single ( ) ;
102
+ p . ChildrenList . RemoveAt ( 0 ) ;
103
+ session . Flush ( ) ;
104
+ transaction . Commit ( ) ;
105
+ }
106
+
107
+ using ( MemoryStream stream = new MemoryStream ( ) )
108
+ {
109
+ BinaryFormatter formatter = new BinaryFormatter ( ) ;
110
+ formatter . Serialize ( stream , session ) ;
111
+
112
+ Assert . AreNotEqual ( 0 , stream . Length ) ;
113
+ }
114
+ }
115
+ }
116
+
117
+ [ Test ]
118
+ public void Serializing_Session_After_Changing_Key_ChildrenMap_Should_Work ( )
119
+ {
120
+ using ( ISession session = OpenSession ( ) )
121
+ {
122
+ using ( ITransaction transaction = session . BeginTransaction ( ) )
123
+ {
124
+ var p = session . Query < Parent > ( ) . Single ( ) ;
125
+ var firstChild = p . ChildrenMap [ "first" ] ;
126
+ var secondChild = p . ChildrenMap [ "second" ] ;
127
+ p . ChildrenMap . Remove ( "first" ) ;
128
+ p . ChildrenMap . Remove ( "second" ) ;
129
+ p . ChildrenMap . Add ( "first" , secondChild ) ;
130
+ p . ChildrenMap . Add ( "second" , firstChild ) ;
131
+ session . Flush ( ) ;
132
+ transaction . Commit ( ) ;
133
+ }
134
+
135
+ using ( MemoryStream stream = new MemoryStream ( ) )
136
+ {
137
+ BinaryFormatter formatter = new BinaryFormatter ( ) ;
138
+ formatter . Serialize ( stream , session ) ;
139
+
140
+ Assert . AreNotEqual ( 0 , stream . Length ) ;
141
+ }
142
+ }
143
+ }
144
+ }
145
+ }
0 commit comments