Skip to content
This repository was archived by the owner on Dec 24, 2022. It is now read-only.

Commit 6cb4f73

Browse files
committed
Add support for mixed self references to LoadSingle as well
1 parent 6b28264 commit 6cb4f73

File tree

2 files changed

+39
-14
lines changed

2 files changed

+39
-14
lines changed

src/ServiceStack.OrmLite/Support/LoadReferences.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -83,15 +83,15 @@ public void SetRefField(FieldDefinition fieldDef, Type refType)
8383
? modelDef.GetRefFieldDef(refModelDef, refType)
8484
: modelDef.GetRefFieldDefIfExists(refModelDef);
8585

86-
if (refField != null)
86+
if (refSelf != null)
8787
{
88-
var sql = GetRefFieldSql(refType, refField);
88+
var sql = GetRefSelfSql(refType, refSelf, refModelDef);
8989
var result = dbCmd.ConvertTo(refType, sql);
9090
fieldDef.SetValueFn(instance, result);
9191
}
92-
else if (refSelf != null)
92+
else if (refField != null)
9393
{
94-
var sql = GetRefSelfSql(refType, refSelf, refModelDef);
94+
var sql = GetRefFieldSql(refType, refField);
9595
var result = dbCmd.ConvertTo(refType, sql);
9696
fieldDef.SetValueFn(instance, result);
9797
}

tests/ServiceStack.OrmLite.Tests/Issues/MultiFieldReferenceTests.cs

Lines changed: 35 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -112,9 +112,9 @@ public void Does_fallback_to_reference_convention_when_alias_is_used()
112112
db.CreateTable<AliasedCustomerAddress>();
113113
db.CreateTable<AliasedCustomer>();
114114

115-
var customer = new AliasedCustomer
115+
var customer1 = new AliasedCustomer
116116
{
117-
Name = "Name",
117+
Name = "Name 1",
118118
WorkAddress = new AliasedCustomerAddress
119119
{
120120
AddressLine1 = "1 Work Road",
@@ -127,19 +127,44 @@ public void Does_fallback_to_reference_convention_when_alias_is_used()
127127
}
128128
};
129129

130-
db.Save(customer, references:true);
130+
var customer2 = new AliasedCustomer
131+
{
132+
Name = "Name 2",
133+
WorkAddress = new AliasedCustomerAddress
134+
{
135+
AddressLine1 = "3 Work Road",
136+
Country = "AU",
137+
},
138+
HomeAddress = new AliasedCustomerAddress
139+
{
140+
AddressLine1 = "4 Home Street",
141+
Country = "NZ",
142+
}
143+
};
144+
145+
db.Save(customer1, references: true);
146+
db.Save(customer2, references: true);
131147

132148
db.Select<AliasedCustomer>().PrintDump();
133149
db.Select<AliasedCustomerAddress>().PrintDump();
134150

135-
var dbCustomer = db.LoadSelect<AliasedCustomer>()[0];
136-
dbCustomer.PrintDump();
151+
var dbCustomers = db.LoadSelect<AliasedCustomer>();
152+
dbCustomers.PrintDump();
153+
154+
var dbCustomer1 = dbCustomers.First(x => x.Name == "Name 1");
155+
156+
Assert.That(dbCustomer1.Name, Is.EqualTo("Name 1"));
157+
Assert.That(dbCustomer1.WorkAddress, Is.Not.Null);
158+
Assert.That(dbCustomer1.WorkAddress.Country, Is.EqualTo("UK"));
159+
Assert.That(dbCustomer1.HomeAddress, Is.Not.Null);
160+
Assert.That(dbCustomer1.HomeAddress.Country, Is.EqualTo("US"));
137161

138-
Assert.That(dbCustomer.Name, Is.EqualTo("Name"));
139-
Assert.That(dbCustomer.WorkAddress, Is.Not.Null);
140-
Assert.That(dbCustomer.WorkAddress.Country, Is.EqualTo("UK"));
141-
Assert.That(dbCustomer.HomeAddress, Is.Not.Null);
142-
Assert.That(dbCustomer.HomeAddress.Country, Is.EqualTo("US"));
162+
var dbCustomer2 = db.LoadSingleById<AliasedCustomer>(customer2.Id);
163+
Assert.That(dbCustomer2.Name, Is.EqualTo("Name 2"));
164+
Assert.That(dbCustomer2.WorkAddress, Is.Not.Null);
165+
Assert.That(dbCustomer2.WorkAddress.Country, Is.EqualTo("AU"));
166+
Assert.That(dbCustomer2.HomeAddress, Is.Not.Null);
167+
Assert.That(dbCustomer2.HomeAddress.Country, Is.EqualTo("NZ"));
143168
}
144169
}
145170

0 commit comments

Comments
 (0)