1
+ using System . Collections . Generic ;
2
+ using NUnit . Framework ;
3
+ using ServiceStack . DataAnnotations ;
4
+ using ServiceStack . Text ;
5
+
6
+ namespace ServiceStack . OrmLite . Tests . Issues
7
+ {
8
+ [ Alias ( "ProUser" ) ]
9
+ public class DomainUser
10
+ {
11
+ public int UserType { get ; set ; }
12
+ public string Id { get ; set ; }
13
+
14
+ [ Reference ]
15
+ public Address HomeAddress { get ; set ; }
16
+
17
+ [ Reference ]
18
+ public List < Order > Orders { get ; set ; }
19
+
20
+ [ DataAnnotations . Ignore ]
21
+ public UserType UserTypeEnum
22
+ {
23
+ get { return ( UserType ) UserType ; }
24
+ set { UserType = ( int ) value ; }
25
+ }
26
+ }
27
+
28
+ public class Address
29
+ {
30
+ [ AutoIncrement ]
31
+ public int Id { get ; set ; }
32
+ public string ProUserId { get ; set ; }
33
+ public string StreetName { get ; set ; }
34
+ }
35
+
36
+ public enum UserType
37
+ {
38
+ Normal = 1 ,
39
+ Domain = 2
40
+ }
41
+
42
+ public class Order
43
+ {
44
+ [ AutoIncrement ]
45
+ public int Id { get ; set ; }
46
+
47
+ public string ProUserId { get ; set ; }
48
+
49
+ public string Details { get ; set ; }
50
+
51
+ }
52
+
53
+ [ TestFixture ]
54
+ public class SaveDomainUserReferencesIssue
55
+ : OrmLiteTestBase
56
+ {
57
+ [ Test ]
58
+ public void Can_save_DomainUser_references ( )
59
+ {
60
+ using ( var db = OpenDbConnection ( ) )
61
+ {
62
+ db . DropAndCreateTable < DomainUser > ( ) ;
63
+ db . DropAndCreateTable < Order > ( ) ;
64
+ db . DropAndCreateTable < Address > ( ) ;
65
+
66
+ var user = new DomainUser
67
+ {
68
+ Id = "UserId" ,
69
+ UserType = 1 ,
70
+ HomeAddress = new Address
71
+ {
72
+ StreetName = "1 Street"
73
+ } ,
74
+ Orders = new List < Order >
75
+ {
76
+ new Order { Details = "Order1 Details" } ,
77
+ new Order { Details = "Order2 Details" } ,
78
+ }
79
+ } ;
80
+
81
+ //Same as below in 1 line
82
+ //db.Save(user, references: true);
83
+ db . Save ( user ) ;
84
+ db . SaveReferences ( user , user . HomeAddress ) ;
85
+ db . SaveReferences ( user , user . Orders ) ;
86
+
87
+ user = db . LoadSingleById < DomainUser > ( "UserId" ) ;
88
+ user . PrintDump ( ) ;
89
+ Assert . That ( user . Orders . Count , Is . EqualTo ( 2 ) ) ;
90
+
91
+ user . UserTypeEnum = UserType . Domain ;
92
+ user . HomeAddress . StreetName = "Some new street" ;
93
+ user . Orders [ 1 ] . Details = "Nestle Chocolates" ;
94
+ user . Orders . Add ( new Order
95
+ {
96
+ ProUserId = user . Id ,
97
+ Details = "Reese" ,
98
+ } ) ;
99
+
100
+ //Same as below in 1 line
101
+ //db.Save(user, references: true);
102
+ db . Save ( user ) ;
103
+ db . SaveReferences ( user , user . HomeAddress ) ;
104
+ db . SaveReferences ( user , user . Orders ) ;
105
+
106
+ user = db . LoadSingleById < DomainUser > ( "UserId" ) ;
107
+ user . PrintDump ( ) ;
108
+
109
+ Assert . That ( user . Orders . Count , Is . EqualTo ( 3 ) ) ;
110
+ }
111
+ }
112
+ }
113
+ }
0 commit comments