1
+ using NUnit . Framework ;
2
+ using ServiceStack . DataAnnotations ;
3
+
4
+ namespace ServiceStack . OrmLite . FirebirdTests
5
+ {
6
+ [ TestFixture ]
7
+ public class ForeignKeyAttributeTests : OrmLiteTestBase
8
+ {
9
+ [ TestFixtureSetUp ]
10
+ public void Setup ( )
11
+ {
12
+ using ( var db = ConnectionString . OpenDbConnection ( ) )
13
+ {
14
+ db . CreateTable < ReferencedType > ( true ) ;
15
+ }
16
+ }
17
+
18
+ [ Test ]
19
+ public void CanCreateSimpleForeignKey ( )
20
+ {
21
+ using ( var db = ConnectionString . OpenDbConnection ( ) )
22
+ {
23
+ db . CreateTable < TypeWithSimpleForeignKey > ( true ) ;
24
+ }
25
+ }
26
+
27
+ [ Test ]
28
+ public void CanCreateForeignWithOnDeleteCascade ( )
29
+ {
30
+ using ( var db = ConnectionString . OpenDbConnection ( ) )
31
+ {
32
+ db . CreateTable < TypeWithOnDeleteCascade > ( true ) ;
33
+ }
34
+ }
35
+
36
+ [ Test ]
37
+ public void CascadesOnDelete ( )
38
+ {
39
+ using ( var db = ConnectionString . OpenDbConnection ( ) )
40
+ {
41
+ db . CreateTable < TypeWithOnDeleteCascade > ( true ) ;
42
+
43
+ db . Save ( new ReferencedType { Id = 1 } ) ;
44
+ db . Save ( new TypeWithOnDeleteCascade { RefId = 1 } ) ;
45
+
46
+ Assert . AreEqual ( 1 , db . Select < ReferencedType > ( ) . Count ) ;
47
+ Assert . AreEqual ( 1 , db . Select < TypeWithOnDeleteCascade > ( ) . Count ) ;
48
+
49
+ db . Delete < ReferencedType > ( r => r . Id == 1 ) ;
50
+
51
+ Assert . AreEqual ( 0 , db . Select < ReferencedType > ( ) . Count ) ;
52
+ Assert . AreEqual ( 0 , db . Select < TypeWithOnDeleteCascade > ( ) . Count ) ;
53
+ }
54
+ }
55
+
56
+ [ Test ]
57
+ public void CanCreateForeignWithOnDeleteCascadeAndOnUpdateCascade ( )
58
+ {
59
+ using ( var db = ConnectionString . OpenDbConnection ( ) )
60
+ {
61
+ db . CreateTable < TypeWithOnDeleteAndUpdateCascade > ( true ) ;
62
+ }
63
+ }
64
+
65
+ [ Test ]
66
+ public void CanCreateForeignWithOnDeleteNoAction ( )
67
+ {
68
+ using ( var db = ConnectionString . OpenDbConnection ( ) )
69
+ {
70
+ db . CreateTable < TypeWithOnDeleteNoAction > ( true ) ;
71
+ }
72
+ }
73
+
74
+ [ Test ]
75
+ public void CanCreateForeignWithOnDeleteRestrict ( )
76
+ {
77
+ using ( var db = ConnectionString . OpenDbConnection ( ) )
78
+ {
79
+ db . CreateTable < TypeWithOnDeleteRestrict > ( true ) ;
80
+ }
81
+ }
82
+
83
+
84
+ [ Test ]
85
+ public void CanCreateForeignWithOnDeleteSetDefault ( )
86
+ {
87
+ using ( var db = ConnectionString . OpenDbConnection ( ) )
88
+ {
89
+ db . CreateTable < TypeWithOnDeleteSetDefault > ( true ) ;
90
+ }
91
+ }
92
+
93
+ [ Test ]
94
+ public void CanCreateForeignWithOnDeleteSetNull ( )
95
+ {
96
+ using ( var db = ConnectionString . OpenDbConnection ( ) )
97
+ {
98
+ db . CreateTable < TypeWithOnDeleteSetNull > ( true ) ;
99
+ }
100
+ }
101
+
102
+ [ TestFixtureTearDown ]
103
+ public void TearDwon ( )
104
+ {
105
+ using ( var db = ConnectionString . OpenDbConnection ( ) )
106
+ {
107
+ db . DropTable < TypeWithOnDeleteAndUpdateCascade > ( ) ;
108
+ db . DropTable < TypeWithOnDeleteSetNull > ( ) ;
109
+ db . DropTable < TypeWithOnDeleteSetDefault > ( ) ;
110
+ db . DropTable < TypeWithOnDeleteRestrict > ( ) ;
111
+ db . DropTable < TypeWithOnDeleteNoAction > ( ) ;
112
+ db . DropTable < TypeWithOnDeleteCascade > ( ) ;
113
+ db . DropTable < TypeWithSimpleForeignKey > ( ) ;
114
+ db . DropTable < ReferencedType > ( ) ;
115
+ }
116
+ }
117
+ }
118
+
119
+ public class ReferencedType
120
+ {
121
+ public int Id { get ; set ; }
122
+ }
123
+
124
+
125
+ [ Alias ( "TWSKF" ) ]
126
+ public class TypeWithSimpleForeignKey
127
+ {
128
+ [ AutoIncrement ]
129
+ public int Id { get ; set ; }
130
+ [ References ( typeof ( ReferencedType ) ) ]
131
+ public int RefId { get ; set ; }
132
+ }
133
+
134
+ [ Alias ( "TWODC" ) ]
135
+ public class TypeWithOnDeleteCascade
136
+ {
137
+ [ AutoIncrement ]
138
+ public int Id { get ; set ; }
139
+
140
+ [ ForeignKey ( typeof ( ReferencedType ) , OnDelete = "CASCADE" , ForeignKeyName = "FK_DC" ) ]
141
+ public int ? RefId { get ; set ; }
142
+ }
143
+
144
+ [ Alias ( "TWODUC" ) ]
145
+ public class TypeWithOnDeleteAndUpdateCascade
146
+ {
147
+ [ AutoIncrement ]
148
+ public int Id { get ; set ; }
149
+
150
+ [ ForeignKey ( typeof ( ReferencedType ) , OnDelete = "CASCADE" , OnUpdate = "CASCADE" , ForeignKeyName = "FK_DC_UC" ) ]
151
+ public int ? RefId { get ; set ; }
152
+ }
153
+
154
+ [ Alias ( "TWODNA" ) ]
155
+ public class TypeWithOnDeleteNoAction
156
+ {
157
+ [ AutoIncrement ]
158
+ public int Id { get ; set ; }
159
+
160
+ [ ForeignKey ( typeof ( ReferencedType ) , OnDelete = "NO ACTION" , ForeignKeyName = "FK_DNA" ) ]
161
+ public int ? RefId { get ; set ; }
162
+ }
163
+
164
+ [ Alias ( "TWODNR" ) ]
165
+ public class TypeWithOnDeleteRestrict
166
+ {
167
+ [ AutoIncrement ]
168
+ public int Id { get ; set ; }
169
+
170
+ [ ForeignKey ( typeof ( ReferencedType ) , OnDelete = "RESTRICT" , ForeignKeyName = "FK_DR" ) ]
171
+ public int ? RefId { get ; set ; }
172
+ }
173
+
174
+ [ Alias ( "TWODDF" ) ]
175
+ public class TypeWithOnDeleteSetDefault
176
+ {
177
+ [ AutoIncrement ]
178
+ public int Id { get ; set ; }
179
+
180
+ [ Default ( typeof ( int ) , "17" ) ]
181
+ [ ForeignKey ( typeof ( ReferencedType ) , OnDelete = "SET DEFAULT" , ForeignKeyName = "FK_DDF" ) ]
182
+ public int RefId { get ; set ; }
183
+ }
184
+
185
+ [ Alias ( "TWODSN" ) ]
186
+ public class TypeWithOnDeleteSetNull
187
+ {
188
+ [ AutoIncrement ]
189
+ public int Id { get ; set ; }
190
+
191
+ [ ForeignKey ( typeof ( ReferencedType ) , OnDelete = "SET NULL" , ForeignKeyName = "FKSN" ) ]
192
+ public int ? RefId { get ; set ; }
193
+ }
194
+ }
0 commit comments