forked from ServiceStack/ServiceStack.OrmLite
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Fixed bug: Method Where<T>(...) fails after NamingStrategy is changed.
- Loading branch information
1 parent
ebcc7b3
commit 7fc0ae9
Showing
10 changed files
with
925 additions
and
19 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
249 changes: 249 additions & 0 deletions
249
src/ServiceStack.OrmLite.MySql.Tests/OrmLiteCreateTableWithNamingStrategyTests.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,249 @@ | ||
using System; | ||
using NUnit.Framework; | ||
using ServiceStack.Common.Tests.Models; | ||
|
||
namespace ServiceStack.OrmLite.MySql.Tests | ||
{ | ||
|
||
[TestFixture] | ||
public class OrmLiteCreateTableWithNamigStrategyTests | ||
: OrmLiteTestBase | ||
{ | ||
|
||
[Test] | ||
public void Can_create_TableWithNamigStrategy_table_prefix() | ||
{ | ||
OrmLite.OrmLiteConfig.DialectProvider.NamingStrategy = new PrefixNamingStrategy | ||
{ | ||
TablePrefix ="tab_", | ||
ColumnPrefix = "col_", | ||
}; | ||
|
||
using (var db = ConnectionString.OpenDbConnection()) | ||
using (var dbCmd = db.CreateCommand()) | ||
{ | ||
dbCmd.CreateTable<ModelWithOnlyStringFields>(true); | ||
} | ||
|
||
OrmLite.OrmLiteConfig.DialectProvider.NamingStrategy= new OrmLiteNamingStrategyBase(); | ||
} | ||
|
||
[Test] | ||
public void Can_create_TableWithNamigStrategy_table_lowered() | ||
{ | ||
OrmLite.OrmLiteConfig.DialectProvider.NamingStrategy = new LowercaseNamingStrategy(); | ||
|
||
using (var db = ConnectionString.OpenDbConnection()) | ||
using (var dbCmd = db.CreateCommand()) | ||
{ | ||
dbCmd.CreateTable<ModelWithOnlyStringFields>(true); | ||
} | ||
|
||
OrmLite.OrmLiteConfig.DialectProvider.NamingStrategy= new OrmLiteNamingStrategyBase(); | ||
} | ||
|
||
|
||
[Test] | ||
public void Can_create_TableWithNamigStrategy_table_nameUnderscoreCoumpound() | ||
{ | ||
OrmLite.OrmLiteConfig.DialectProvider.NamingStrategy = new UnderscoreSeparatedCompoundNamingStrategy(); | ||
|
||
using (var db = ConnectionString.OpenDbConnection()) | ||
using (var dbCmd = db.CreateCommand()) | ||
{ | ||
dbCmd.CreateTable<ModelWithOnlyStringFields>(true); | ||
} | ||
|
||
OrmLite.OrmLiteConfig.DialectProvider.NamingStrategy= new OrmLiteNamingStrategyBase(); | ||
} | ||
|
||
[Test] | ||
public void Can_get_data_from_TableWithNamigStrategy_with_GetById() | ||
{ | ||
OrmLite.OrmLiteConfig.DialectProvider.NamingStrategy = OrmLite.OrmLiteConfig.DialectProvider.NamingStrategy = new PrefixNamingStrategy | ||
{ | ||
TablePrefix = "tab_", | ||
ColumnPrefix = "col_", | ||
}; | ||
|
||
using (var db = ConnectionString.OpenDbConnection()) | ||
using (var dbCmd = db.CreateCommand()) | ||
{ | ||
dbCmd.CreateTable<ModelWithOnlyStringFields>(true); | ||
ModelWithOnlyStringFields m = new ModelWithOnlyStringFields() { Id= "999", AlbumId = "112", AlbumName="ElectroShip", Name = "MyNameIsBatman"}; | ||
|
||
dbCmd.Save<ModelWithOnlyStringFields>(m); | ||
var modelFromDb = dbCmd.GetById<ModelWithOnlyStringFields>("999"); | ||
|
||
Assert.AreEqual(m.Name, modelFromDb.Name); | ||
} | ||
|
||
OrmLite.OrmLiteConfig.DialectProvider.NamingStrategy= new OrmLiteNamingStrategyBase(); | ||
} | ||
|
||
|
||
[Test] | ||
public void Can_get_data_from_TableWithNamigStrategy_with_query_by_example() | ||
{ | ||
OrmLite.OrmLiteConfig.DialectProvider.NamingStrategy = OrmLite.OrmLiteConfig.DialectProvider.NamingStrategy = new PrefixNamingStrategy | ||
{ | ||
TablePrefix = "tab_", | ||
ColumnPrefix = "col_", | ||
}; | ||
|
||
using (var db = ConnectionString.OpenDbConnection()) | ||
using (var dbCmd = db.CreateCommand()) | ||
{ | ||
dbCmd.CreateTable<ModelWithOnlyStringFields>(true); | ||
ModelWithOnlyStringFields m = new ModelWithOnlyStringFields() { Id = "998", AlbumId = "112", AlbumName = "ElectroShip", Name = "QueryByExample" }; | ||
|
||
dbCmd.Save<ModelWithOnlyStringFields>(m); | ||
var modelFromDb = dbCmd.Where<ModelWithOnlyStringFields>(new { Name = "QueryByExample" })[0]; | ||
|
||
Assert.AreEqual(m.Name, modelFromDb.Name); | ||
} | ||
|
||
OrmLite.OrmLiteConfig.DialectProvider.NamingStrategy= new OrmLiteNamingStrategyBase(); | ||
} | ||
|
||
|
||
[Test] | ||
public void Can_get_data_from_TableWithNamigStrategy_AfterChangingNamingStrategy() | ||
{ | ||
OrmLite.OrmLiteConfig.DialectProvider.NamingStrategy = OrmLite.OrmLiteConfig.DialectProvider.NamingStrategy = new PrefixNamingStrategy | ||
{ | ||
TablePrefix = "tab_", | ||
ColumnPrefix = "col_", | ||
}; | ||
|
||
using (var db = ConnectionString.OpenDbConnection()) | ||
using (var dbCmd = db.CreateCommand()) | ||
{ | ||
dbCmd.CreateTable<ModelWithOnlyStringFields>(true); | ||
ModelWithOnlyStringFields m = new ModelWithOnlyStringFields() { Id = "998", AlbumId = "112", AlbumName = "ElectroShip", Name = "QueryByExample" }; | ||
|
||
dbCmd.Save<ModelWithOnlyStringFields>(m); | ||
var modelFromDb = dbCmd.Where<ModelWithOnlyStringFields>(new { Name = "QueryByExample" })[0]; | ||
|
||
Assert.AreEqual(m.Name, modelFromDb.Name); | ||
|
||
modelFromDb = dbCmd.GetById<ModelWithOnlyStringFields>("998"); | ||
Assert.AreEqual(m.Name, modelFromDb.Name); | ||
|
||
} | ||
|
||
OrmLite.OrmLiteConfig.DialectProvider.NamingStrategy= new OrmLiteNamingStrategyBase(); | ||
|
||
using (var db = ConnectionString.OpenDbConnection()) | ||
using (var dbCmd = db.CreateCommand()) | ||
{ | ||
dbCmd.CreateTable<ModelWithOnlyStringFields>(true); | ||
ModelWithOnlyStringFields m = new ModelWithOnlyStringFields() { Id = "998", AlbumId = "112", AlbumName = "ElectroShip", Name = "QueryByExample" }; | ||
|
||
dbCmd.Save<ModelWithOnlyStringFields>(m); | ||
var modelFromDb = dbCmd.Where<ModelWithOnlyStringFields>(new { Name = "QueryByExample" })[0]; | ||
|
||
Assert.AreEqual(m.Name, modelFromDb.Name); | ||
|
||
modelFromDb = dbCmd.GetById<ModelWithOnlyStringFields>("998"); | ||
Assert.AreEqual(m.Name, modelFromDb.Name); | ||
} | ||
|
||
OrmLite.OrmLiteConfig.DialectProvider.NamingStrategy = OrmLite.OrmLiteConfig.DialectProvider.NamingStrategy = new PrefixNamingStrategy | ||
{ | ||
TablePrefix = "tab_", | ||
ColumnPrefix = "col_", | ||
}; | ||
|
||
using (var db = ConnectionString.OpenDbConnection()) | ||
using (var dbCmd = db.CreateCommand()) | ||
{ | ||
dbCmd.CreateTable<ModelWithOnlyStringFields>(true); | ||
ModelWithOnlyStringFields m = new ModelWithOnlyStringFields() { Id = "998", AlbumId = "112", AlbumName = "ElectroShip", Name = "QueryByExample" }; | ||
|
||
dbCmd.Save<ModelWithOnlyStringFields>(m); | ||
var modelFromDb = dbCmd.Where<ModelWithOnlyStringFields>(new { Name = "QueryByExample" })[0]; | ||
|
||
Assert.AreEqual(m.Name, modelFromDb.Name); | ||
|
||
modelFromDb = dbCmd.GetById<ModelWithOnlyStringFields>("998"); | ||
Assert.AreEqual(m.Name, modelFromDb.Name); | ||
} | ||
|
||
OrmLite.OrmLiteConfig.DialectProvider.NamingStrategy= new OrmLiteNamingStrategyBase(); | ||
} | ||
|
||
} | ||
|
||
public class PrefixNamingStrategy : OrmLiteNamingStrategyBase | ||
{ | ||
|
||
public string TablePrefix { get; set; } | ||
|
||
public string ColumnPrefix { get; set; } | ||
|
||
public override string GetTableName(string name) | ||
{ | ||
return TablePrefix + name; | ||
} | ||
|
||
public override string GetColumnName(string name) | ||
{ | ||
return ColumnPrefix + name; | ||
} | ||
|
||
} | ||
|
||
public class LowercaseNamingStrategy : OrmLiteNamingStrategyBase | ||
{ | ||
|
||
public override string GetTableName(string name) | ||
{ | ||
return name.ToLower(); | ||
} | ||
|
||
public override string GetColumnName(string name) | ||
{ | ||
return name.ToLower(); | ||
} | ||
|
||
} | ||
|
||
public class UnderscoreSeparatedCompoundNamingStrategy : OrmLiteNamingStrategyBase | ||
{ | ||
|
||
public override string GetTableName(string name) | ||
{ | ||
return toUnderscoreSeparatedCompound(name); | ||
} | ||
|
||
public override string GetColumnName(string name) | ||
{ | ||
return toUnderscoreSeparatedCompound(name); | ||
} | ||
|
||
|
||
string toUnderscoreSeparatedCompound(string name) | ||
{ | ||
|
||
string r = char.ToLower(name[0]).ToString(); | ||
|
||
for (int i = 1; i < name.Length; i++) | ||
{ | ||
char c = name[i]; | ||
if (char.IsUpper(name[i])) | ||
{ | ||
r += "_"; | ||
r += char.ToLower(name[i]); | ||
} | ||
else | ||
{ | ||
r += name[i]; | ||
} | ||
} | ||
return r; | ||
} | ||
|
||
} | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.