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

Commit 2aa4b48

Browse files
committed
Fix issue mapping to alias having same name as alternative field
1 parent 37b7646 commit 2aa4b48

File tree

3 files changed

+63
-2
lines changed

3 files changed

+63
-2
lines changed

src/ServiceStack.OrmLite/ModelDefinition.cs

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,12 @@ public FieldDefinition[] FieldDefinitionsArray
7979
get { return fieldDefinitionsArray; }
8080
}
8181

82+
private FieldDefinition[] fieldDefinitionsWithAliases;
83+
public FieldDefinition[] FieldDefinitionsWithAliases
84+
{
85+
get { return fieldDefinitionsWithAliases; }
86+
}
87+
8288
public List<FieldDefinition> IgnoredFieldDefinitions { get; set; }
8389

8490
private FieldDefinition[] ignoredFieldDefinitionsArray;
@@ -125,14 +131,24 @@ public FieldDefinition GetFieldDefinition(string fieldName)
125131
{
126132
if (fieldName != null)
127133
{
134+
foreach (var f in FieldDefinitionsWithAliases)
135+
{
136+
if (f.Alias == fieldName)
137+
return f;
138+
}
128139
foreach (var f in FieldDefinitionsArray)
129140
{
130-
if (f.Name == fieldName)
141+
if (f.FieldName == fieldName)
142+
return f;
143+
}
144+
foreach (var f in FieldDefinitionsWithAliases)
145+
{
146+
if (string.Equals(f.Alias, fieldName, StringComparison.OrdinalIgnoreCase))
131147
return f;
132148
}
133149
foreach (var f in FieldDefinitionsArray)
134150
{
135-
if (string.Equals(f.Name, fieldName, StringComparison.OrdinalIgnoreCase))
151+
if (string.Equals(f.FieldName, fieldName, StringComparison.OrdinalIgnoreCase))
136152
return f;
137153
}
138154
}
@@ -142,6 +158,8 @@ public FieldDefinition GetFieldDefinition(string fieldName)
142158
public void AfterInit()
143159
{
144160
fieldDefinitionsArray = FieldDefinitions.ToArray();
161+
fieldDefinitionsWithAliases = FieldDefinitions.Where(x => x.Alias != null).ToArray();
162+
145163
ignoredFieldDefinitionsArray = IgnoredFieldDefinitions.ToArray();
146164

147165
var allItems = new List<FieldDefinition>(FieldDefinitions);
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
using System.Linq;
2+
using NUnit.Framework;
3+
using ServiceStack.DataAnnotations;
4+
using ServiceStack.Text;
5+
6+
namespace ServiceStack.OrmLite.Tests.Issues
7+
{
8+
public class AddressAudit
9+
{
10+
[PrimaryKey, AutoIncrement]
11+
[Alias("AddressId")]
12+
public int Id { get; set; }
13+
14+
[Alias("AddressLinkId")]
15+
public int AddressId { get; set; }
16+
}
17+
18+
[TestFixture]
19+
public class SelectAliasIssue : OrmLiteTestBase
20+
{
21+
[Test]
22+
public void Does_populate_table_with_Aliases_having_same_name_as_alternative_field()
23+
{
24+
using (var db = OpenDbConnection())
25+
{
26+
db.DropAndCreateTable<AddressAudit>();
27+
28+
db.Insert(new AddressAudit { AddressId = 11 });
29+
db.Insert(new AddressAudit { AddressId = 12 });
30+
db.Insert(new AddressAudit { AddressId = 13 });
31+
32+
var rows = db.Select<AddressAudit>();
33+
Assert.That(rows.All(x => x.Id > 0));
34+
35+
var debtor = db.SingleById<AddressAudit>(2);
36+
var row = db.Single<AddressAudit>(audit => audit.AddressId == debtor.AddressId);
37+
38+
row.PrintDump();
39+
}
40+
}
41+
}
42+
}

tests/ServiceStack.OrmLite.Tests/ServiceStack.OrmLite.Tests.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,7 @@
131131
<Compile Include="Issues\BelongsToIssue.cs" />
132132
<Compile Include="Issues\CanBuildExpressionWithAbstractType.cs" />
133133
<Compile Include="Issues\ColumnGuessingTests.cs" />
134+
<Compile Include="Issues\SelectAliasIssue.cs" />
134135
<Compile Include="Issues\SimpleInsertSelectBenchmark.cs" />
135136
<Compile Include="Issues\JoinBoolSqlServerIssue.cs" />
136137
<Compile Include="Issues\LoadReferencesFKandSelfRefIssue.cs" />

0 commit comments

Comments
 (0)