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