diff --git a/FreeSql.DbContext/FreeSql.DbContext.xml b/FreeSql.DbContext/FreeSql.DbContext.xml
index 28fdb213..ddd18378 100644
--- a/FreeSql.DbContext/FreeSql.DbContext.xml
+++ b/FreeSql.DbContext/FreeSql.DbContext.xml
@@ -110,6 +110,13 @@
清空状态数据
+
+
+ 根据 lambda 条件删除数据
+
+
+
+
添加
@@ -204,6 +211,15 @@
+
+
+ 批量注入 Repository,可以参考代码自行调整
+
+
+
+
+
+
动态Type,在使用 Repository<object> 后使用本方法,指定实体类型
diff --git a/FreeSql.Tests/FreeSql.Tests.DbContext/g.cs b/FreeSql.Tests/FreeSql.Tests.DbContext/g.cs
index 6bb48a5e..5e6cf923 100644
--- a/FreeSql.Tests/FreeSql.Tests.DbContext/g.cs
+++ b/FreeSql.Tests/FreeSql.Tests.DbContext/g.cs
@@ -44,7 +44,7 @@ public class g
static Lazy pgsqlLazy = new Lazy(() => new FreeSql.FreeSqlBuilder()
.UseConnectionString(FreeSql.DataType.PostgreSQL, "Host=192.168.164.10;Port=5432;Username=postgres;Password=123456;Database=tedb;Pooling=true;Maximum Pool Size=10")
.UseAutoSyncStructure(true)
- .UseSyncStructureToLower(true)
+ .UseNameConvert(FreeSql.Internal.NameConvertType.ToLower)
.UseLazyLoading(true)
.UseMonitorCommand(
cmd =>
@@ -63,7 +63,7 @@ public class g
.UseConnectionString(FreeSql.DataType.Oracle, "user id=user1;password=123456;data source=//127.0.0.1:1521/XE;Pooling=true;Max Pool Size=10")
.UseAutoSyncStructure(true)
.UseLazyLoading(true)
- .UseSyncStructureToUpper(true)
+ .UseNameConvert(FreeSql.Internal.NameConvertType.ToUpper)
.UseNoneCommandParameter(true)
.UseMonitorCommand(
diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/Curd/MySqlSelectTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/Curd/MySqlSelectTest.cs
index b1881760..77ba34f0 100644
--- a/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/Curd/MySqlSelectTest.cs
+++ b/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/Curd/MySqlSelectTest.cs
@@ -270,7 +270,7 @@ namespace FreeSql.Tests.MySqlConnector
})
});
var ddd = g.mysql.Select().LeftJoin(d => d.ParentCode == d.Parent.Code).ToTreeList();
- Assert.Equal(1, ddd.Count);
+ Assert.Single(ddd);
Assert.Equal(2, ddd[0].Childs.Count);
}
public class District
diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/Curd/OnDuplicateKeyUpdateTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/Curd/OnDuplicateKeyUpdateTest.cs
index ff852737..2145dedb 100644
--- a/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/Curd/OnDuplicateKeyUpdateTest.cs
+++ b/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/Curd/OnDuplicateKeyUpdateTest.cs
@@ -21,10 +21,10 @@ namespace FreeSql.Tests.MySqlConnector
{
g.mysql.Delete(new[] { 100, 101, 102 }).ExecuteAffrows();
var odku1 = g.mysql.Insert(new TestOnDuplicateKeyUpdateInfo { id = 100, title = "title-100", time = DateTime.Parse("2000-01-01") }).NoneParameter().OnDuplicateKeyUpdate();
- Assert.Equal(odku1.ToSql(), @"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`, `time`) VALUES(100, 'title-100', '2000-01-01 00:00:00.000')
+ Assert.Equal(@"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`, `time`) VALUES(100, 'title-100', '2000-01-01 00:00:00.000')
ON DUPLICATE KEY UPDATE
`title` = VALUES(`title`),
-`time` = VALUES(`time`)");
+`time` = VALUES(`time`)", odku1.ToSql());
Assert.Equal(1, odku1.ExecuteAffrows());
var odku2 = g.mysql.Insert(new[] {
@@ -32,10 +32,10 @@ ON DUPLICATE KEY UPDATE
new TestOnDuplicateKeyUpdateInfo { id = 101, title = "title-101", time = DateTime.Parse("2000-01-01") },
new TestOnDuplicateKeyUpdateInfo { id = 102, title = "title-102", time = DateTime.Parse("2000-01-01") }
}).NoneParameter().OnDuplicateKeyUpdate();
- Assert.Equal(odku2.ToSql(), @"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`, `time`) VALUES(100, 'title-100', '2000-01-01 00:00:00.000'), (101, 'title-101', '2000-01-01 00:00:00.000'), (102, 'title-102', '2000-01-01 00:00:00.000')
+ Assert.Equal(@"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`, `time`) VALUES(100, 'title-100', '2000-01-01 00:00:00.000'), (101, 'title-101', '2000-01-01 00:00:00.000'), (102, 'title-102', '2000-01-01 00:00:00.000')
ON DUPLICATE KEY UPDATE
`title` = VALUES(`title`),
-`time` = VALUES(`time`)");
+`time` = VALUES(`time`)", odku2.ToSql());
odku2.ExecuteAffrows();
}
@@ -44,10 +44,10 @@ ON DUPLICATE KEY UPDATE
{
g.mysql.Delete(new[] { 200, 201, 202 }).ExecuteAffrows();
var odku1 = g.mysql.Insert(new TestOnDuplicateKeyUpdateInfo { id = 200, title = "title-200", time = DateTime.Parse("2000-01-01") }).IgnoreColumns(a => a.time).NoneParameter().OnDuplicateKeyUpdate();
- Assert.Equal(odku1.ToSql(), @"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`) VALUES(200, 'title-200')
+ Assert.Equal(@"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`) VALUES(200, 'title-200')
ON DUPLICATE KEY UPDATE
`title` = VALUES(`title`),
-`time` = '2000-01-01 00:00:00.000'");
+`time` = '2000-01-01 00:00:00.000'", odku1.ToSql());
Assert.Equal(1, odku1.ExecuteAffrows());
var odku2 = g.mysql.Insert(new[] {
@@ -55,21 +55,21 @@ ON DUPLICATE KEY UPDATE
new TestOnDuplicateKeyUpdateInfo { id = 201, title = "title-201", time = DateTime.Parse("2000-01-01") },
new TestOnDuplicateKeyUpdateInfo { id = 202, title = "title-202", time = DateTime.Parse("2000-01-01") }
}).IgnoreColumns(a => a.time).NoneParameter().OnDuplicateKeyUpdate();
- Assert.Equal(odku2.ToSql(), @"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`) VALUES(200, 'title-200'), (201, 'title-201'), (202, 'title-202')
+ Assert.Equal(@"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`) VALUES(200, 'title-200'), (201, 'title-201'), (202, 'title-202')
ON DUPLICATE KEY UPDATE
`title` = VALUES(`title`),
`time` = CASE `id`
WHEN 200 THEN '2000-01-01 00:00:00.000'
WHEN 201 THEN '2000-01-01 00:00:00.000'
-WHEN 202 THEN '2000-01-01 00:00:00.000' END");
+WHEN 202 THEN '2000-01-01 00:00:00.000' END", odku2.ToSql());
odku2.ExecuteAffrows();
g.mysql.Delete(new[] { 200, 201, 202 }).ExecuteAffrows();
odku1 = g.mysql.Insert(new TestOnDuplicateKeyUpdateInfo { id = 200, title = "title-200", time = DateTime.Parse("2000-01-01") }).IgnoreColumns(a => a.time).NoneParameter().OnDuplicateKeyUpdate().IgnoreColumns(a => a.title);
- Assert.Equal(odku1.ToSql(), @"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`) VALUES(200, 'title-200')
+ Assert.Equal(@"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`) VALUES(200, 'title-200')
ON DUPLICATE KEY UPDATE
-`time` = '2000-01-01 00:00:00.000'");
+`time` = '2000-01-01 00:00:00.000'", odku1.ToSql());
Assert.Equal(1, odku1.ExecuteAffrows());
odku2 = g.mysql.Insert(new[] {
@@ -77,12 +77,12 @@ ON DUPLICATE KEY UPDATE
new TestOnDuplicateKeyUpdateInfo { id = 201, title = "title-201", time = DateTime.Parse("2000-01-01") },
new TestOnDuplicateKeyUpdateInfo { id = 202, title = "title-202", time = DateTime.Parse("2000-01-01") }
}).IgnoreColumns(a => a.time).NoneParameter().OnDuplicateKeyUpdate().IgnoreColumns(a => a.title);
- Assert.Equal(odku2.ToSql(), @"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`) VALUES(200, 'title-200'), (201, 'title-201'), (202, 'title-202')
+ Assert.Equal(@"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`) VALUES(200, 'title-200'), (201, 'title-201'), (202, 'title-202')
ON DUPLICATE KEY UPDATE
`time` = CASE `id`
WHEN 200 THEN '2000-01-01 00:00:00.000'
WHEN 201 THEN '2000-01-01 00:00:00.000'
-WHEN 202 THEN '2000-01-01 00:00:00.000' END");
+WHEN 202 THEN '2000-01-01 00:00:00.000' END", odku2.ToSql());
odku2.ExecuteAffrows();
}
@@ -91,10 +91,10 @@ WHEN 202 THEN '2000-01-01 00:00:00.000' END");
{
g.mysql.Delete(new[] { 300, 301, 302 }).ExecuteAffrows();
var odku1 = g.mysql.Insert(new TestOnDuplicateKeyUpdateInfo { id = 300, title = "title-300", time = DateTime.Parse("2000-01-01") }).InsertColumns(a => a.title).NoneParameter().OnDuplicateKeyUpdate();
- Assert.Equal(odku1.ToSql(), @"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`) VALUES(300, 'title-300')
+ Assert.Equal(@"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`) VALUES(300, 'title-300')
ON DUPLICATE KEY UPDATE
`title` = VALUES(`title`),
-`time` = '2000-01-01 00:00:00.000'");
+`time` = '2000-01-01 00:00:00.000'", odku1.ToSql());
Assert.Equal(1, odku1.ExecuteAffrows());
var odku2 = g.mysql.Insert(new[] {
@@ -102,21 +102,21 @@ ON DUPLICATE KEY UPDATE
new TestOnDuplicateKeyUpdateInfo { id = 301, title = "title-301", time = DateTime.Parse("2000-01-01") },
new TestOnDuplicateKeyUpdateInfo { id = 302, title = "title-302", time = DateTime.Parse("2000-01-01") }
}).InsertColumns(a => a.title).NoneParameter().OnDuplicateKeyUpdate();
- Assert.Equal(odku2.ToSql(), @"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`) VALUES(300, 'title-300'), (301, 'title-301'), (302, 'title-302')
+ Assert.Equal(@"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`) VALUES(300, 'title-300'), (301, 'title-301'), (302, 'title-302')
ON DUPLICATE KEY UPDATE
`title` = VALUES(`title`),
`time` = CASE `id`
WHEN 300 THEN '2000-01-01 00:00:00.000'
WHEN 301 THEN '2000-01-01 00:00:00.000'
-WHEN 302 THEN '2000-01-01 00:00:00.000' END");
+WHEN 302 THEN '2000-01-01 00:00:00.000' END", odku2.ToSql());
odku2.ExecuteAffrows();
g.mysql.Delete(new[] { 300, 301, 302 }).ExecuteAffrows();
odku1 = g.mysql.Insert(new TestOnDuplicateKeyUpdateInfo { id = 300, title = "title-300", time = DateTime.Parse("2000-01-01") }).InsertColumns(a => a.title).NoneParameter().OnDuplicateKeyUpdate().UpdateColumns(a => a.time);
- Assert.Equal(odku1.ToSql(), @"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`) VALUES(300, 'title-300')
+ Assert.Equal(@"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`) VALUES(300, 'title-300')
ON DUPLICATE KEY UPDATE
-`time` = '2000-01-01 00:00:00.000'");
+`time` = '2000-01-01 00:00:00.000'", odku1.ToSql());
Assert.Equal(1, odku1.ExecuteAffrows());
odku2 = g.mysql.Insert(new[] {
@@ -124,12 +124,12 @@ ON DUPLICATE KEY UPDATE
new TestOnDuplicateKeyUpdateInfo { id = 301, title = "title-301", time = DateTime.Parse("2000-01-01") },
new TestOnDuplicateKeyUpdateInfo { id = 302, title = "title-302", time = DateTime.Parse("2000-01-01") }
}).InsertColumns(a => a.title).NoneParameter().OnDuplicateKeyUpdate().UpdateColumns(a => a.time);
- Assert.Equal(odku2.ToSql(), @"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`) VALUES(300, 'title-300'), (301, 'title-301'), (302, 'title-302')
+ Assert.Equal(@"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`) VALUES(300, 'title-300'), (301, 'title-301'), (302, 'title-302')
ON DUPLICATE KEY UPDATE
`time` = CASE `id`
WHEN 300 THEN '2000-01-01 00:00:00.000'
WHEN 301 THEN '2000-01-01 00:00:00.000'
-WHEN 302 THEN '2000-01-01 00:00:00.000' END");
+WHEN 302 THEN '2000-01-01 00:00:00.000' END", odku2.ToSql());
odku2.ExecuteAffrows();
}
@@ -138,9 +138,9 @@ WHEN 302 THEN '2000-01-01 00:00:00.000' END");
{
g.mysql.Delete(new[] { 400, 401, 402 }).ExecuteAffrows();
var odku1 = g.mysql.Insert(new TestOnDuplicateKeyUpdateInfo { id = 400, title = "title-400", time = DateTime.Parse("2000-01-01") }).NoneParameter().OnDuplicateKeyUpdate().Set(a => a.time, DateTime.Parse("2020-1-1"));
- Assert.Equal(odku1.ToSql(), @"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`, `time`) VALUES(400, 'title-400', '2000-01-01 00:00:00.000')
+ Assert.Equal(@"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`, `time`) VALUES(400, 'title-400', '2000-01-01 00:00:00.000')
ON DUPLICATE KEY UPDATE
-`time` = '2020-01-01 00:00:00.000'");
+`time` = '2020-01-01 00:00:00.000'", odku1.ToSql());
Assert.Equal(1, odku1.ExecuteAffrows());
var odku2 = g.mysql.Insert(new[] {
@@ -148,18 +148,18 @@ ON DUPLICATE KEY UPDATE
new TestOnDuplicateKeyUpdateInfo { id = 401, title = "title-401", time = DateTime.Parse("2000-01-01") },
new TestOnDuplicateKeyUpdateInfo { id = 402, title = "title-402", time = DateTime.Parse("2000-01-01") }
}).NoneParameter().OnDuplicateKeyUpdate().Set(a => a.time, DateTime.Parse("2020-1-1"));
- Assert.Equal(odku2.ToSql(), @"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`, `time`) VALUES(400, 'title-400', '2000-01-01 00:00:00.000'), (401, 'title-401', '2000-01-01 00:00:00.000'), (402, 'title-402', '2000-01-01 00:00:00.000')
+ Assert.Equal(@"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`, `time`) VALUES(400, 'title-400', '2000-01-01 00:00:00.000'), (401, 'title-401', '2000-01-01 00:00:00.000'), (402, 'title-402', '2000-01-01 00:00:00.000')
ON DUPLICATE KEY UPDATE
-`time` = '2020-01-01 00:00:00.000'");
+`time` = '2020-01-01 00:00:00.000'", odku2.ToSql());
odku2.ExecuteAffrows();
var dt2020 = DateTime.Parse("2020-1-1");
g.mysql.Delete(new[] { 400, 401, 402 }).ExecuteAffrows();
odku1 = g.mysql.Insert(new TestOnDuplicateKeyUpdateInfo { id = 400, title = "title-400", time = DateTime.Parse("2000-01-01") }).NoneParameter().OnDuplicateKeyUpdate().Set(a => a.time == dt2020);
- Assert.Equal(odku1.ToSql(), @"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`, `time`) VALUES(400, 'title-400', '2000-01-01 00:00:00.000')
+ Assert.Equal(@"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`, `time`) VALUES(400, 'title-400', '2000-01-01 00:00:00.000')
ON DUPLICATE KEY UPDATE
-`time` = '2020-01-01 00:00:00.000'");
+`time` = '2020-01-01 00:00:00.000'", odku1.ToSql());
Assert.Equal(1, odku1.ExecuteAffrows());
odku2 = g.mysql.Insert(new[] {
@@ -167,17 +167,17 @@ ON DUPLICATE KEY UPDATE
new TestOnDuplicateKeyUpdateInfo { id = 401, title = "title-401", time = DateTime.Parse("2000-01-01") },
new TestOnDuplicateKeyUpdateInfo { id = 402, title = "title-402", time = DateTime.Parse("2000-01-01") }
}).NoneParameter().OnDuplicateKeyUpdate().Set(a => a.time == dt2020);
- Assert.Equal(odku2.ToSql(), @"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`, `time`) VALUES(400, 'title-400', '2000-01-01 00:00:00.000'), (401, 'title-401', '2000-01-01 00:00:00.000'), (402, 'title-402', '2000-01-01 00:00:00.000')
+ Assert.Equal(@"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`, `time`) VALUES(400, 'title-400', '2000-01-01 00:00:00.000'), (401, 'title-401', '2000-01-01 00:00:00.000'), (402, 'title-402', '2000-01-01 00:00:00.000')
ON DUPLICATE KEY UPDATE
-`time` = '2020-01-01 00:00:00.000'");
+`time` = '2020-01-01 00:00:00.000'", odku2.ToSql());
odku2.ExecuteAffrows();
g.mysql.Delete(new[] { 400, 401, 402 }).ExecuteAffrows();
odku1 = g.mysql.Insert(new TestOnDuplicateKeyUpdateInfo { id = 400, title = "title-400", time = DateTime.Parse("2000-01-01") }).NoneParameter().OnDuplicateKeyUpdate().Set(a => new { time = dt2020, title = a.title + "123" });
- Assert.Equal(odku1.ToSql(), @"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`, `time`) VALUES(400, 'title-400', '2000-01-01 00:00:00.000')
+ Assert.Equal(@"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`, `time`) VALUES(400, 'title-400', '2000-01-01 00:00:00.000')
ON DUPLICATE KEY UPDATE
-`time` = '2020-01-01 00:00:00.000', `title` = concat(`title`, '123')");
+`time` = '2020-01-01 00:00:00.000', `title` = concat(`title`, '123')", odku1.ToSql());
Assert.Equal(1, odku1.ExecuteAffrows());
odku2 = g.mysql.Insert(new[] {
@@ -185,9 +185,9 @@ ON DUPLICATE KEY UPDATE
new TestOnDuplicateKeyUpdateInfo { id = 401, title = "title-401", time = DateTime.Parse("2000-01-01") },
new TestOnDuplicateKeyUpdateInfo { id = 402, title = "title-402", time = DateTime.Parse("2000-01-01") }
}).NoneParameter().OnDuplicateKeyUpdate().Set(a => new { time = dt2020, title = a.title + "123" });
- Assert.Equal(odku2.ToSql(), @"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`, `time`) VALUES(400, 'title-400', '2000-01-01 00:00:00.000'), (401, 'title-401', '2000-01-01 00:00:00.000'), (402, 'title-402', '2000-01-01 00:00:00.000')
+ Assert.Equal(@"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`, `time`) VALUES(400, 'title-400', '2000-01-01 00:00:00.000'), (401, 'title-401', '2000-01-01 00:00:00.000'), (402, 'title-402', '2000-01-01 00:00:00.000')
ON DUPLICATE KEY UPDATE
-`time` = '2020-01-01 00:00:00.000', `title` = concat(`title`, '123')");
+`time` = '2020-01-01 00:00:00.000', `title` = concat(`title`, '123')", odku2.ToSql());
odku2.ExecuteAffrows();
}
diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Dameng/Curd/DamengSelectTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Dameng/Curd/DamengSelectTest.cs
index f4ab9a5b..34f665fc 100644
--- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Dameng/Curd/DamengSelectTest.cs
+++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Dameng/Curd/DamengSelectTest.cs
@@ -211,7 +211,7 @@ namespace FreeSql.Tests.Odbc.Dameng
})
});
var ddd = g.dameng.Select().LeftJoin(d => d.ParentCode == d.Parent.Code).ToTreeList();
- Assert.Equal(1, ddd.Count);
+ Assert.Single(ddd);
Assert.Equal(2, ddd[0].Childs.Count);
}
public class District
diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Default/Curd/OdbcSelectTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Default/Curd/OdbcSelectTest.cs
index 9e404f0f..bf9b4bdc 100644
--- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Default/Curd/OdbcSelectTest.cs
+++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Default/Curd/OdbcSelectTest.cs
@@ -202,7 +202,7 @@ namespace FreeSql.Tests.Odbc.Default
})
});
var ddd = g.odbc.Select().LeftJoin(d => d.ParentCode == d.Parent.Code).ToTreeList();
- Assert.Equal(1, ddd.Count);
+ Assert.Single(ddd);
Assert.Equal(2, ddd[0].Childs.Count);
}
public class District
diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/MySql/Curd/MySqlSelectTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/MySql/Curd/MySqlSelectTest.cs
index 04c11f44..39785795 100644
--- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/MySql/Curd/MySqlSelectTest.cs
+++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/MySql/Curd/MySqlSelectTest.cs
@@ -311,7 +311,7 @@ namespace FreeSql.Tests.Odbc.MySql
})
});
var ddd = g.mysql.Select().LeftJoin(d => d.ParentCode == d.Parent.Code).ToTreeList();
- Assert.Equal(1, ddd.Count);
+ Assert.Single(ddd);
Assert.Equal(2, ddd[0].Childs.Count);
}
public class District
diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Oracle/Curd/OracleSelectTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Oracle/Curd/OracleSelectTest.cs
index f003c4cf..22d51222 100644
--- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Oracle/Curd/OracleSelectTest.cs
+++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Oracle/Curd/OracleSelectTest.cs
@@ -211,7 +211,7 @@ namespace FreeSql.Tests.Odbc.Oracle
})
});
var ddd = g.oracle.Select().LeftJoin(d => d.ParentCode == d.Parent.Code).ToTreeList();
- Assert.Equal(1, ddd.Count);
+ Assert.Single(ddd);
Assert.Equal(2, ddd[0].Childs.Count);
}
public class District
diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/PostgreSQL/Curd/PostgreSQLSelectTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/PostgreSQL/Curd/PostgreSQLSelectTest.cs
index 38514d5c..b7b9b513 100644
--- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/PostgreSQL/Curd/PostgreSQLSelectTest.cs
+++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/PostgreSQL/Curd/PostgreSQLSelectTest.cs
@@ -287,7 +287,7 @@ namespace FreeSql.Tests.Odbc.PostgreSQL
})
});
var ddd = g.pgsql.Select().LeftJoin(d => d.ParentCode == d.Parent.Code).ToTreeList();
- Assert.Equal(1, ddd.Count);
+ Assert.Single(ddd);
Assert.Equal(2, ddd[0].Childs.Count);
}
public class District
diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/SqlServer/Curd/SqlServerSelectTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/SqlServer/Curd/SqlServerSelectTest.cs
index b868dc81..e636c42b 100644
--- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/SqlServer/Curd/SqlServerSelectTest.cs
+++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/SqlServer/Curd/SqlServerSelectTest.cs
@@ -201,7 +201,7 @@ namespace FreeSql.Tests.Odbc.SqlServer
})
});
var ddd = g.sqlserver.Select().LeftJoin(d => d.ParentCode == d.Parent.Code).ToTreeList();
- Assert.Equal(1, ddd.Count);
+ Assert.Single(ddd);
Assert.Equal(2, ddd[0].Childs.Count);
}
public class District
diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/g.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/g.cs
index 4bb24a55..e0b589bd 100644
--- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/g.cs
+++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/g.cs
@@ -35,7 +35,7 @@ public class g
//.UseConnectionFactory(FreeSql.DataType.OdbcOracle, () => new System.Data.Odbc.OdbcConnection("Driver={Oracle in XE};Server=//127.0.0.1:1521/XE;Persist Security Info=False;Trusted_Connection=Yes;UID=odbc1;PWD=123456"))
.UseAutoSyncStructure(true)
.UseLazyLoading(true)
- .UseSyncStructureToUpper(true)
+ .UseNameConvert(FreeSql.Internal.NameConvertType.ToUpper)
//.UseNoneCommandParameter(true)
.UseMonitorCommand(
@@ -50,7 +50,7 @@ public class g
.UseConnectionString(FreeSql.DataType.OdbcPostgreSQL, "Driver={PostgreSQL Unicode(x64)};Server=192.168.164.10;Port=5432;UID=postgres;PWD=123456;Database=tedb_odbc;Pooling=true;Maximum Pool Size=2")
//.UseConnectionFactory(FreeSql.DataType.OdbcPostgreSQL, () => new System.Data.Odbc.OdbcConnection("Driver={PostgreSQL Unicode(x64)};Server=192.168.164.10;Port=5432;UID=postgres;PWD=123456;Database=tedb_odbc;Pooling=true;"))
.UseAutoSyncStructure(true)
- .UseSyncStructureToLower(true)
+ .UseNameConvert(FreeSql.Internal.NameConvertType.ToLower)
.UseLazyLoading(true)
.UseMonitorCommand(
cmd => Trace.WriteLine(cmd.CommandText), //监听SQL命令对象,在执行前
@@ -74,7 +74,7 @@ public class g
//.UseConnectionFactory(FreeSql.DataType.OdbcDameng, () => new System.Data.Odbc.OdbcConnection("Driver={DM8 ODBC DRIVER};Server=127.0.0.1:5236;Persist Security Info=False;Trusted_Connection=Yes;UID=USER1;PWD=123456789"))
.UseAutoSyncStructure(true)
.UseLazyLoading(true)
- .UseSyncStructureToUpper(true)
+ .UseNameConvert(FreeSql.Internal.NameConvertType.ToUpper)
//.UseNoneCommandParameter(true)
.UseMonitorCommand(
@@ -89,7 +89,7 @@ public class g
//.UseConnectionFactory(FreeSql.DataType.OdbcDameng, () => new System.Data.Odbc.OdbcConnection("Driver={DM8 ODBC DRIVER};Server=127.0.0.1:5236;Persist Security Info=False;Trusted_Connection=Yes;UID=USER1;PWD=123456789"))
.UseAutoSyncStructure(true)
.UseLazyLoading(true)
- .UseSyncStructureToUpper(true)
+ .UseNameConvert(FreeSql.Internal.NameConvertType.ToUpper)
//.UseNoneCommandParameter(true)
.UseMonitorCommand(
diff --git a/FreeSql.Tests/FreeSql.Tests/MsAccess/Curd/MsAccessSelectTest.cs b/FreeSql.Tests/FreeSql.Tests/MsAccess/Curd/MsAccessSelectTest.cs
index aa03e685..d4191350 100644
--- a/FreeSql.Tests/FreeSql.Tests/MsAccess/Curd/MsAccessSelectTest.cs
+++ b/FreeSql.Tests/FreeSql.Tests/MsAccess/Curd/MsAccessSelectTest.cs
@@ -202,7 +202,7 @@ namespace FreeSql.Tests.MsAccess
})
});
var ddd = g.msaccess.Select().LeftJoin(d => d.ParentCode == d.Parent.Code).ToTreeList();
- Assert.Equal(1, ddd.Count);
+ Assert.Single(ddd);
Assert.Equal(2, ddd[0].Childs.Count);
}
public class District
diff --git a/FreeSql.Tests/FreeSql.Tests/MySql/Curd/MySqlSelectTest.cs b/FreeSql.Tests/FreeSql.Tests/MySql/Curd/MySqlSelectTest.cs
index 86e92f50..223ce220 100644
--- a/FreeSql.Tests/FreeSql.Tests/MySql/Curd/MySqlSelectTest.cs
+++ b/FreeSql.Tests/FreeSql.Tests/MySql/Curd/MySqlSelectTest.cs
@@ -311,7 +311,7 @@ namespace FreeSql.Tests.MySql
})
});
var ddd = g.mysql.Select().LeftJoin(d => d.ParentCode == d.Parent.Code).ToTreeList();
- Assert.Equal(1, ddd.Count);
+ Assert.Single(ddd);
Assert.Equal(2, ddd[0].Childs.Count);
}
public class District
diff --git a/FreeSql.Tests/FreeSql.Tests/Oracle/Curd/OracleSelectTest.cs b/FreeSql.Tests/FreeSql.Tests/Oracle/Curd/OracleSelectTest.cs
index 2c3c2928..88cab797 100644
--- a/FreeSql.Tests/FreeSql.Tests/Oracle/Curd/OracleSelectTest.cs
+++ b/FreeSql.Tests/FreeSql.Tests/Oracle/Curd/OracleSelectTest.cs
@@ -211,7 +211,7 @@ namespace FreeSql.Tests.Oracle
})
});
var ddd = g.oracle.Select().LeftJoin(d => d.ParentCode == d.Parent.Code).ToTreeList();
- Assert.Equal(1, ddd.Count);
+ Assert.Single(ddd);
Assert.Equal(2, ddd[0].Childs.Count);
}
public class District
diff --git a/FreeSql.Tests/FreeSql.Tests/PostgreSQL/Curd/PostgreSQLSelectTest.cs b/FreeSql.Tests/FreeSql.Tests/PostgreSQL/Curd/PostgreSQLSelectTest.cs
index f1a5ff31..1cfd5d9f 100644
--- a/FreeSql.Tests/FreeSql.Tests/PostgreSQL/Curd/PostgreSQLSelectTest.cs
+++ b/FreeSql.Tests/FreeSql.Tests/PostgreSQL/Curd/PostgreSQLSelectTest.cs
@@ -287,7 +287,7 @@ namespace FreeSql.Tests.PostgreSQL
})
});
var ddd = g.pgsql.Select().LeftJoin(d => d.ParentCode == d.Parent.Code).ToTreeList();
- Assert.Equal(1, ddd.Count);
+ Assert.Single(ddd);
Assert.Equal(2, ddd[0].Childs.Count);
}
public class District
diff --git a/FreeSql.Tests/FreeSql.Tests/SqlServer/Curd/SqlServerSelectTest.cs b/FreeSql.Tests/FreeSql.Tests/SqlServer/Curd/SqlServerSelectTest.cs
index 11d570b7..c739c6a6 100644
--- a/FreeSql.Tests/FreeSql.Tests/SqlServer/Curd/SqlServerSelectTest.cs
+++ b/FreeSql.Tests/FreeSql.Tests/SqlServer/Curd/SqlServerSelectTest.cs
@@ -211,7 +211,7 @@ namespace FreeSql.Tests.SqlServer
})
});
var ddd = g.sqlserver.Select().LeftJoin(d => d.ParentCode == d.Parent.Code).ToTreeList();
- Assert.Equal(1, ddd.Count);
+ Assert.Single(ddd);
Assert.Equal(2, ddd[0].Childs.Count);
}
public class District
diff --git a/FreeSql.Tests/FreeSql.Tests/Sqlite/Curd/SqliteSelectTest.cs b/FreeSql.Tests/FreeSql.Tests/Sqlite/Curd/SqliteSelectTest.cs
index 9414c910..86f622e9 100644
--- a/FreeSql.Tests/FreeSql.Tests/Sqlite/Curd/SqliteSelectTest.cs
+++ b/FreeSql.Tests/FreeSql.Tests/Sqlite/Curd/SqliteSelectTest.cs
@@ -228,7 +228,7 @@ namespace FreeSql.Tests.Sqlite
})
});
var ddd = g.sqlite.Select().LeftJoin(d => d.ParentCode == d.Parent.Code).ToTreeList();
- Assert.Equal(1, ddd.Count);
+ Assert.Single(ddd);
Assert.Equal(2, ddd[0].Childs.Count);
}
public class District
diff --git a/FreeSql.Tests/FreeSql.Tests/UnitTest1.cs b/FreeSql.Tests/FreeSql.Tests/UnitTest1.cs
index f7df0e51..ddd934e8 100644
--- a/FreeSql.Tests/FreeSql.Tests/UnitTest1.cs
+++ b/FreeSql.Tests/FreeSql.Tests/UnitTest1.cs
@@ -574,7 +574,7 @@ namespace FreeSql.Tests
IFreeSql fsql = new FreeSql.FreeSqlBuilder()
.UseConnectionString(FreeSql.DataType.PostgreSQL, "Host=192.168.164.10;Port=5432;Username=postgres;Password=123456;Database=tedb;Pooling=true;Maximum Pool Size=7")
- .UseEntityPropertyNameConvert(Internal.StringConvertType.PascalCaseToUnderscoreWithLower)
+ .UseNameConvert(Internal.NameConvertType.PascalCaseToUnderscoreWithLower)
.UseNoneCommandParameter(true)
.UseAutoSyncStructure(true) //自动同步实体结构到数据库
.UseMonitorCommand(a => Trace.WriteLine(a.CommandText))
diff --git a/FreeSql.Tests/FreeSql.Tests/UnitTest3.cs b/FreeSql.Tests/FreeSql.Tests/UnitTest3.cs
index 67dadc54..cbdb223b 100644
--- a/FreeSql.Tests/FreeSql.Tests/UnitTest3.cs
+++ b/FreeSql.Tests/FreeSql.Tests/UnitTest3.cs
@@ -247,7 +247,7 @@ namespace FreeSql.Tests
.UseAutoSyncStructure(true)
.UseGenerateCommandParameterWithLambda(true)
.UseLazyLoading(true)
- .UseSyncStructureToUpper(true)
+ .UseNameConvert(FreeSql.Internal.NameConvertType.ToUpper)
.UseMonitorCommand(cmd => Trace.WriteLine("\r\n线程" + Thread.CurrentThread.ManagedThreadId + ": " + cmd.CommandText))
.Build());
ib.Register("db3", () => new FreeSql.FreeSqlBuilder()
diff --git a/FreeSql.Tests/FreeSql.Tests/g.cs b/FreeSql.Tests/FreeSql.Tests/g.cs
index 985eae8b..992dfb44 100644
--- a/FreeSql.Tests/FreeSql.Tests/g.cs
+++ b/FreeSql.Tests/FreeSql.Tests/g.cs
@@ -29,7 +29,7 @@ public class g
//.UseConnectionFactory(FreeSql.DataType.PostgreSQL, () => new Npgsql.NpgsqlConnection("Host=192.168.164.10;Port=5432;Username=postgres;Password=123456;Database=tedb;Pooling=true;"))
.UseAutoSyncStructure(true)
//.UseGenerateCommandParameterWithLambda(true)
- .UseSyncStructureToLower(true)
+ .UseNameConvert(FreeSql.Internal.NameConvertType.ToLower)
.UseLazyLoading(true)
.UseMonitorCommand(
cmd => Trace.WriteLine("\r\n线程" + Thread.CurrentThread.ManagedThreadId + ": " + cmd.CommandText) //监听SQL命令对象,在执行前
@@ -60,7 +60,7 @@ public class g
.UseAutoSyncStructure(true)
//.UseGenerateCommandParameterWithLambda(true)
.UseLazyLoading(true)
- .UseSyncStructureToUpper(true)
+ .UseNameConvert(FreeSql.Internal.NameConvertType.ToUpper)
//.UseNoneCommandParameter(true)
.UseMonitorCommand(
diff --git a/FreeSql/FreeSql.xml b/FreeSql/FreeSql.xml
index cd174404..d9dcf8c7 100644
--- a/FreeSql/FreeSql.xml
+++ b/FreeSql/FreeSql.xml
@@ -902,10 +902,11 @@
-
+
不使用参数化,可通过 IFreeSql.CodeFirst.IsNotCommandParameter 全局性设置
+ 是否不使用参数化
@@ -1937,10 +1938,11 @@
-
+
不使用参数化,可通过 IFreeSql.CodeFirst.IsNotCommandParameter 全局性设置
+ 是否不使用参数化
@@ -2692,12 +2694,12 @@
- 转小写同步结构
+ 转小写同步结构,适用 PostgreSQL
- 转大写同步结构
+ 转大写同步结构,适用 Oracle/达梦
@@ -3178,14 +3180,52 @@
BigApple -> bigapple
-
+
+
+ 不进行任何处理
+
+
+
将帕斯卡命名字符串转换为下划线分隔字符串
BigApple -> Big_Apple
-
-
+
+
+
+ 将帕斯卡命名字符串转换为下划线分隔字符串,且转换为全大写
+
+ BigApple -> BIG_APPLE
+
+
+
+
+ 将帕斯卡命名字符串转换为下划线分隔字符串,且转换为全小写
+
+ BigApple -> big_apple
+
+
+
+
+ 将下划线分隔字符串命名字符串转换为帕斯卡
+
+ big_apple -> BigApple
+
+
+
+
+ 将字符串转换为大写
+
+ BigApple -> BIGAPPLE
+
+
+
+
+ 将字符串转换为小写
+
+ BigApple -> bigapple
+
diff --git a/FreeSql/FreeSqlBuilder.cs b/FreeSql/FreeSqlBuilder.cs
index 26720246..c4b74eec 100644
--- a/FreeSql/FreeSqlBuilder.cs
+++ b/FreeSql/FreeSqlBuilder.cs
@@ -21,6 +21,7 @@ namespace FreeSql
bool _isGenerateCommandParameterWithLambda = false;
bool _isLazyLoading = false;
StringConvertType _entityPropertyConvertType = StringConvertType.None;
+ NameConvertType _nameConvertType = NameConvertType.None;
Action _aopCommandExecuting = null;
Action _aopCommandExecuted = null;
Type _providerType = null;
@@ -82,6 +83,7 @@ namespace FreeSql
///
/// true:转小写, false:不转
///
+ [Obsolete("请使用 UseNameConvert(NameConvertType.ToLower),或者 fsql.CodeFirst.IsSyncStructureToLower = value")]
public FreeSqlBuilder UseSyncStructureToLower(bool value)
{
_isSyncStructureToLower = value;
@@ -92,6 +94,7 @@ namespace FreeSql
///
/// true:转大写, false:不转
///
+ [Obsolete("请使用 UseNameConvert(NameConvertType.ToUpper),或者 fsql.CodeFirst.IsSyncStructureToUpper = value")]
public FreeSqlBuilder UseSyncStructureToUpper(bool value)
{
_isSyncStructureToUpper = value;
@@ -163,12 +166,25 @@ namespace FreeSql
///
///
///
+ [Obsolete("请使用 UseNameConvert 功能")]
public FreeSqlBuilder UseEntityPropertyNameConvert(StringConvertType convertType)
{
_entityPropertyConvertType = convertType;
return this;
}
+ ///
+ /// 实体类名 -> 数据库表名,命名转换(类名、属性名都生效)
+ /// 优先级小于 [Table(Name = "xxx")]、[Column(Name = "xxx")]
+ ///
+ ///
+ ///
+ public FreeSqlBuilder UseNameConvert(NameConvertType convertType)
+ {
+ _nameConvertType = convertType;
+ return this;
+ }
+
public IFreeSql Build() => Build();
public IFreeSql Build()
{
@@ -263,27 +279,60 @@ namespace FreeSql
//添加实体属性名全局AOP转换处理
if (_entityPropertyConvertType != StringConvertType.None)
{
+ string PascalCaseToUnderScore(string str) => string.Concat(str.Select((x, i) => i > 0 && char.IsUpper(x) ? "_" + x.ToString() : x.ToString()));
+
switch (_entityPropertyConvertType)
{
case StringConvertType.Lower:
- ret.Aop.ConfigEntityProperty += (_, e) =>
- e.ModifyResult.Name = e.Property.Name.ToLower();
+ ret.Aop.ConfigEntityProperty += (_, e) => e.ModifyResult.Name = e.Property.Name.ToLower();
break;
case StringConvertType.Upper:
- ret.Aop.ConfigEntityProperty += (_, e) =>
- e.ModifyResult.Name = e.Property.Name.ToUpper();
+ ret.Aop.ConfigEntityProperty += (_, e) => e.ModifyResult.Name = e.Property.Name.ToUpper();
break;
case StringConvertType.PascalCaseToUnderscore:
- ret.Aop.ConfigEntityProperty += (_, e) =>
- e.ModifyResult.Name = StringUtils.PascalCaseToUnderScore(e.Property.Name);
+ ret.Aop.ConfigEntityProperty += (_, e) => e.ModifyResult.Name = PascalCaseToUnderScore(e.Property.Name);
break;
case StringConvertType.PascalCaseToUnderscoreWithLower:
- ret.Aop.ConfigEntityProperty += (_, e) =>
- e.ModifyResult.Name = StringUtils.PascalCaseToUnderScore(e.Property.Name).ToLower();
+ ret.Aop.ConfigEntityProperty += (_, e) => e.ModifyResult.Name = PascalCaseToUnderScore(e.Property.Name).ToLower();
break;
case StringConvertType.PascalCaseToUnderscoreWithUpper:
- ret.Aop.ConfigEntityProperty += (_, e) =>
- e.ModifyResult.Name = StringUtils.PascalCaseToUnderScore(e.Property.Name).ToUpper();
+ ret.Aop.ConfigEntityProperty += (_, e) => e.ModifyResult.Name = PascalCaseToUnderScore(e.Property.Name).ToUpper();
+ break;
+ default:
+ break;
+ }
+ }
+ //添加实体属性名全局AOP转换处理
+ if (_nameConvertType != NameConvertType.None)
+ {
+ string PascalCaseToUnderScore(string str) => string.Concat(str.Select((x, i) => i > 0 && char.IsUpper(x) ? "_" + x.ToString() : x.ToString()));
+ string UnderScorePascalCase(string str) => string.Join("", str.Split('_').Select(a => a.Length > 0 ? string.Concat(char.ToUpper(a[0]), a.Substring(1)) : ""));
+
+ switch (_nameConvertType)
+ {
+ case NameConvertType.ToLower:
+ ret.Aop.ConfigEntity += (_, e) => e.ModifyResult.Name = e.EntityType.Name.ToLower();
+ ret.Aop.ConfigEntityProperty += (_, e) => e.ModifyResult.Name = e.Property.Name.ToLower();
+ break;
+ case NameConvertType.ToUpper:
+ ret.Aop.ConfigEntity += (_, e) => e.ModifyResult.Name = e.EntityType.Name.ToUpper();
+ ret.Aop.ConfigEntityProperty += (_, e) => e.ModifyResult.Name = e.Property.Name.ToUpper();
+ break;
+ case NameConvertType.PascalCaseToUnderscore:
+ ret.Aop.ConfigEntity += (_, e) => e.ModifyResult.Name = PascalCaseToUnderScore(e.EntityType.Name);
+ ret.Aop.ConfigEntityProperty += (_, e) => e.ModifyResult.Name = PascalCaseToUnderScore(e.Property.Name);
+ break;
+ case NameConvertType.PascalCaseToUnderscoreWithLower:
+ ret.Aop.ConfigEntity += (_, e) => e.ModifyResult.Name = PascalCaseToUnderScore(e.EntityType.Name).ToLower();
+ ret.Aop.ConfigEntityProperty += (_, e) => e.ModifyResult.Name = PascalCaseToUnderScore(e.Property.Name).ToLower();
+ break;
+ case NameConvertType.PascalCaseToUnderscoreWithUpper:
+ ret.Aop.ConfigEntity += (_, e) => e.ModifyResult.Name = PascalCaseToUnderScore(e.EntityType.Name).ToUpper();
+ ret.Aop.ConfigEntityProperty += (_, e) => e.ModifyResult.Name = PascalCaseToUnderScore(e.Property.Name).ToUpper();
+ break;
+ case NameConvertType.UnderscoreToPascalCase:
+ ret.Aop.ConfigEntity += (_, e) => e.ModifyResult.Name = UnderScorePascalCase(e.EntityType.Name);
+ ret.Aop.ConfigEntityProperty += (_, e) => e.ModifyResult.Name = UnderScorePascalCase(e.Property.Name);
break;
default:
break;
diff --git a/FreeSql/Interface/ICodeFirst.cs b/FreeSql/Interface/ICodeFirst.cs
index 04f2085e..e242a390 100644
--- a/FreeSql/Interface/ICodeFirst.cs
+++ b/FreeSql/Interface/ICodeFirst.cs
@@ -13,11 +13,11 @@ namespace FreeSql
bool IsAutoSyncStructure { get; set; }
///
- /// 转小写同步结构
+ /// 转小写同步结构,适用 PostgreSQL
///
bool IsSyncStructureToLower { get; set; }
///
- /// 转大写同步结构
+ /// 转大写同步结构,适用 Oracle/达梦
///
bool IsSyncStructureToUpper { get; set; }
///
diff --git a/FreeSql/Internal/StringConvertType.cs b/FreeSql/Internal/StringConvertType.cs
index 281fe8fa..6571b7a0 100644
--- a/FreeSql/Internal/StringConvertType.cs
+++ b/FreeSql/Internal/StringConvertType.cs
@@ -1,4 +1,6 @@
-namespace FreeSql.Internal
+using System;
+
+namespace FreeSql.Internal
{
public enum StringConvertType
{
@@ -42,4 +44,54 @@
///
Lower
}
+
+ public enum NameConvertType
+ {
+ ///
+ /// 不进行任何处理
+ ///
+ None = 0,
+
+ ///
+ /// 将帕斯卡命名字符串转换为下划线分隔字符串
+ ///
+ /// BigApple -> Big_Apple
+ ///
+ PascalCaseToUnderscore,
+
+ ///
+ /// 将帕斯卡命名字符串转换为下划线分隔字符串,且转换为全大写
+ ///
+ /// BigApple -> BIG_APPLE
+ ///
+ PascalCaseToUnderscoreWithUpper,
+
+ ///
+ /// 将帕斯卡命名字符串转换为下划线分隔字符串,且转换为全小写
+ ///
+ /// BigApple -> big_apple
+ ///
+ PascalCaseToUnderscoreWithLower,
+
+ ///
+ /// 将下划线分隔字符串命名字符串转换为帕斯卡
+ ///
+ /// big_apple -> BigApple
+ ///
+ UnderscoreToPascalCase,
+
+ ///
+ /// 将字符串转换为大写
+ ///
+ /// BigApple -> BIGAPPLE
+ ///
+ ToUpper,
+
+ ///
+ /// 将字符串转换为小写
+ ///
+ /// BigApple -> bigapple
+ ///
+ ToLower
+ }
}
\ No newline at end of file
diff --git a/FreeSql/Internal/StringUtils.cs b/FreeSql/Internal/StringUtils.cs
deleted file mode 100644
index 6ec4819b..00000000
--- a/FreeSql/Internal/StringUtils.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-using System.Linq;
-
-namespace FreeSql.Internal
-{
- public static class StringUtils
- {
- ///
- /// 将帕斯卡命名字符串转换为下划线分隔字符串
- ///
- /// BigApple -> Big_Apple
- ///
- ///
- ///
- public static string PascalCaseToUnderScore(string str)
- {
- return string.Concat(str.Select((x, i) =>
- i > 0 && char.IsUpper(x) ? "_" + x.ToString() : x.ToString()));
- }
- }
-}
\ No newline at end of file