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

Commit 85bec23

Browse files
committed
Try repro dynamic results with Custom NamingStrategy
1 parent 87a4e52 commit 85bec23

File tree

1 file changed

+115
-0
lines changed

1 file changed

+115
-0
lines changed
Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
using System;
2+
using NUnit.Framework;
3+
using ServiceStack.DataAnnotations;
4+
5+
namespace ServiceStack.OrmLite.Tests.Issues
6+
{
7+
public class DynamicResultsNamingStrategyTest : OrmLiteTestBase
8+
{
9+
public class Menu : EntityBase<Menu>
10+
{
11+
[AutoIncrement]
12+
public int Id { get; set; }
13+
14+
[ForeignKey(typeof(Menu))]
15+
public int? ParentId { get; set; }
16+
17+
// [Required]
18+
// public MenuType Type { get; set; }
19+
20+
[Required, StringLength(100)]
21+
public string Name { get; set; }
22+
23+
[StringLength(100)]
24+
public string Form { get; set; }
25+
26+
[StringLength(50)]
27+
public string Icon { get; set; }
28+
29+
[StringLength(1000)]
30+
public string Style { get; set; }
31+
32+
// [ForeignKey(typeof(User))]
33+
public int? UserId { get; set; }
34+
}
35+
36+
public abstract class EntityBase<T> // : IEntity<T>
37+
{
38+
[Required, Default(typeof(bool), "0")]
39+
public bool IsDeleted { get; set; }
40+
[Required, Default(typeof(bool), "1")]
41+
public bool IsActive { get; set; } = true;
42+
public int? Position { get; set; }
43+
//public ulong RowVersion { get; set; }
44+
public Guid RecId { get; set; }
45+
}
46+
47+
public class DatabaseNamingStrategy : OrmLiteNamingStrategyBase
48+
{
49+
public override string GetTableName(string name)
50+
{
51+
return ToUnderscoreSeparated(name);
52+
}
53+
54+
public override string GetColumnName(string name)
55+
{
56+
return ToUnderscoreSeparated(name);
57+
}
58+
59+
60+
string ToUnderscoreSeparated(string name)
61+
{
62+
63+
string r = char.ToLower(name[0]).ToString();
64+
65+
for (int i = 1; i < name.Length; i++)
66+
{
67+
char c = name[i];
68+
if (char.IsUpper(name[i]))
69+
{
70+
r += "_";
71+
r += char.ToLower(name[i]);
72+
}
73+
else
74+
{
75+
r += name[i];
76+
}
77+
}
78+
return r;
79+
}
80+
}
81+
82+
[Test]
83+
public void Can_select_dynamic_results_from_custom_NamingStrategy()
84+
{
85+
OrmLiteConfig.BeforeExecFilter = dbCmd => Console.WriteLine(dbCmd.GetDebugString());
86+
87+
var hold = SqliteDialect.Provider.NamingStrategy;
88+
SqliteDialect.Provider.NamingStrategy = new DatabaseNamingStrategy();
89+
90+
using (var db = OpenDbConnection())
91+
{
92+
db.DropAndCreateTable<Menu>();
93+
94+
var rows = new[] {
95+
new Menu {
96+
Name = "Test List",
97+
RecId = new Guid("2F96233B-152E-4D20-BE08-5633431A9EBC")
98+
}
99+
};
100+
101+
db.InsertAll(rows);
102+
103+
var q = db.From<Menu>().Select(x => new { x.Id, x.RecId, x.Name });
104+
var results = db.Select<(int id, Guid recId, string name)>(q);
105+
106+
var expected = rows[0];
107+
Assert.That(results[0].id, Is.EqualTo(1));
108+
Assert.That(results[0].recId, Is.EqualTo(expected.RecId));
109+
Assert.That(results[0].name, Is.EqualTo(expected.Name));
110+
}
111+
112+
SqliteDialect.Provider.NamingStrategy = hold;
113+
}
114+
}
115+
}

0 commit comments

Comments
 (0)