From 02cd7ad5576386ce142cb49e829e0e4871d0a027 Mon Sep 17 00:00:00 2001 From: 28810 <28810@YEXIANGQIN> Date: Mon, 24 Feb 2020 18:03:37 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E5=AE=8C=E5=96=84=20IUpdate.SetSource=20?= =?UTF-8?q?=E7=BB=84=E5=90=88=E4=B8=BB=E9=94=AE=E7=9A=84=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E5=8D=95=E5=85=83=E6=B5=8B=E8=AF=95=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FreeSql.DbContext/FreeSql.DbContext.xml | 7 - .../MySqlConnector/Curd/MySqlUpdateTest.cs | 13 + .../Dameng/Curd/DamengUpdateTest.cs | 23 ++ .../Default/Curd/OdbcUpdateTest.cs | 13 + .../MySql/Curd/MySqlUpdateTest.cs | 13 + .../Oracle/Curd/OracleUpdateTest.cs | 13 + .../PostgreSQL/Curd/PostgreSQLUpdateTest.cs | 13 + .../SqlServer/Curd/SqlServerUpdateTest.cs | 13 + .../MsAccess/Curd/MsAccessUpdateTest.cs | 23 ++ .../MySql/Curd/MySqlUpdateTest.cs | 13 + .../Oracle/Curd/OracleUpdateTest.cs | 13 + .../PostgreSQL/Curd/PostgreSQLUpdateTest.cs | 14 + .../SqlServer/Curd/SqlServerUpdateTest.cs | 14 + .../Sqlite/Curd/SqliteUpdateTest.cs | 13 + FreeSql/FreeSql.xml | 330 +++++++++--------- .../Curd/MsAccessUpdate.cs | 4 +- .../Curd/MySqlUpdate.cs | 4 +- .../Dameng/Curd/OdbcDamengUpdate.cs | 4 +- .../Default/Curd/OdbcUpdate.cs | 4 +- .../GBase/Curd/OdbcGBaseUpdate.cs | 4 +- .../MySql/Curd/OdbcMySqlUpdate.cs | 4 +- .../Oracle/Curd/OdbcOracleUpdate.cs | 4 +- .../PostgreSQL/Curd/OdbcPostgreSQLUpdate.cs | 4 +- .../SqlServer/Curd/OdbcSqlServerUpdate.cs | 4 +- .../Curd/OracleUpdate.cs | 4 +- .../Curd/PostgreSQLUpdate.cs | 4 +- .../Curd/SqlServerUpdate.cs | 4 +- .../Curd/SqliteUpdate.cs | 8 +- 28 files changed, 375 insertions(+), 209 deletions(-) diff --git a/FreeSql.DbContext/FreeSql.DbContext.xml b/FreeSql.DbContext/FreeSql.DbContext.xml index d9f91124..dc0203b8 100644 --- a/FreeSql.DbContext/FreeSql.DbContext.xml +++ b/FreeSql.DbContext/FreeSql.DbContext.xml @@ -110,13 +110,6 @@ 清空状态数据 - - - 根据 lambda 条件删除数据 - - - - 添加 diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/Curd/MySqlUpdateTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/Curd/MySqlUpdateTest.cs index 1a6ad37b..8c22ca85 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/Curd/MySqlUpdateTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/Curd/MySqlUpdateTest.cs @@ -78,6 +78,19 @@ namespace FreeSql.Tests.MySqlConnector Assert.Equal("UPDATE `TestEnumUpdateTb` SET `type` = 'sum211', `time` = '0001-01-01 00:00:00.000' WHERE (`id` = 0)", sql); g.mysql.Update().NoneParameter().SetSource(new TestEnumUpdateTb { id = (int)id, type = TestEnumUpdateTbType.biggit }).ExecuteAffrows(); Assert.Equal(TestEnumUpdateTbType.biggit, g.mysql.Select().Where(a => a.id == id).First()?.type); + + sql = g.mysql.Update().SetSource(new[] { + new ts_source_mpk { id1 = 1, id2 = 7, xx = "a1" }, + new ts_source_mpk { id1 = 1, id2 = 8, xx = "b122" } + }).NoneParameter().ToSql().Replace("\r\n", ""); + } + public class ts_source_mpk + { + [Column(IsPrimary = true)] + public int id1 { get; set; } + [Column(IsPrimary = true)] + public int id2 { get; set; } + public string xx { get; set; } } [Fact] public void IgnoreColumns() diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Dameng/Curd/DamengUpdateTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Dameng/Curd/DamengUpdateTest.cs index 51a139c0..1c5c437d 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Dameng/Curd/DamengUpdateTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Dameng/Curd/DamengUpdateTest.cs @@ -48,6 +48,29 @@ namespace FreeSql.Tests.Odbc.Dameng sql = update.SetSource(items).Set(a => a.CreateTime, new DateTime(2020, 1, 1)).ToSql().Replace("\r\n", ""); Assert.Equal("UPDATE \"TB_TOPIC\" SET \"CREATETIME\" = to_timestamp('2020-01-01 00:00:00.000000','YYYY-MM-DD HH24:MI:SS.FF6') WHERE (\"ID\" IN (1,2,3,4,5,6,7,8,9,10))", sql); + + if (g.dameng.Select().Where(a => a.id1 == 1 && a.id2 == 7).Any() == false) + g.dameng.Insert(new ts_source_mpk { id1 = 1, id2 = 7 }).ExecuteAffrows(); + if (g.dameng.Select().Where(a => a.id1 == 1 && a.id2 == 8).Any() == false) + g.dameng.Insert(new ts_source_mpk { id1 = 1, id2 = 8 }).ExecuteAffrows(); + + sql = g.dameng.Update().SetSource(new[] { + new ts_source_mpk { id1 = 1, id2 = 7, xx = "a1" }, + new ts_source_mpk { id1 = 1, id2 = 8, xx = "b122" } + }).NoneParameter().ToSql().Replace("\r\n", ""); + g.dameng.Update().SetSource(new[] { + new ts_source_mpk { id1 = 1, id2 = 7, xx = "a1" }, + new ts_source_mpk { id1 = 1, id2 = 8, xx = "b122" } + }).NoneParameter().ExecuteAffrows(); + var testlist = g.dameng.Select().ToList(); + } + public class ts_source_mpk + { + [Column(IsPrimary = true)] + public int id1 { get; set; } + [Column(IsPrimary = true)] + public int id2 { get; set; } + public string xx { get; set; } } [Fact] public void IgnoreColumns() diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Default/Curd/OdbcUpdateTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Default/Curd/OdbcUpdateTest.cs index 3b2fe87d..7adec224 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Default/Curd/OdbcUpdateTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Default/Curd/OdbcUpdateTest.cs @@ -50,6 +50,19 @@ namespace FreeSql.Tests.Odbc.Default sql = update.SetSource(items).IgnoreColumns(a => a.TypeGuid).Set(a => a.CreateTime, new DateTime(2020, 1, 1)).ToSql().Replace("\r\n", ""); Assert.Equal("UPDATE [tb_topic] SET [CreateTime] = '2020-01-01 00:00:00' WHERE ([Id] IN (1,2,3,4,5,6,7,8,9,10))", sql); + + sql = g.odbc.Update().SetSource(new[] { + new ts_source_mpk { id1 = 1, id2 = 7, xx = "a1" }, + new ts_source_mpk { id1 = 1, id2 = 8, xx = "b122" } + }).NoneParameter().ToSql().Replace("\r\n", ""); + } + public class ts_source_mpk + { + [Column(IsPrimary = true)] + public int id1 { get; set; } + [Column(IsPrimary = true)] + public int id2 { get; set; } + public string xx { get; set; } } [Fact] public void IgnoreColumns() diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/MySql/Curd/MySqlUpdateTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/MySql/Curd/MySqlUpdateTest.cs index d0497e2d..a187cf59 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/MySql/Curd/MySqlUpdateTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/MySql/Curd/MySqlUpdateTest.cs @@ -78,6 +78,19 @@ namespace FreeSql.Tests.Odbc.MySql Assert.Equal("UPDATE `TestEnumUpdateTb` SET `type` = 'sum211', `time` = '0001-01-01 00:00:00.000' WHERE (`id` = 0)", sql); g.mysql.Update().NoneParameter().SetSource(new TestEnumUpdateTb { id = (int)id, type = TestEnumUpdateTbType.biggit }).ExecuteAffrows(); Assert.Equal(TestEnumUpdateTbType.biggit, g.mysql.Select().Where(a => a.id == id).First()?.type); + + sql = g.mysql.Update().SetSource(new[] { + new ts_source_mpk { id1 = 1, id2 = 7, xx = "a1" }, + new ts_source_mpk { id1 = 1, id2 = 8, xx = "b122" } + }).NoneParameter().ToSql().Replace("\r\n", ""); + } + public class ts_source_mpk + { + [Column(IsPrimary = true)] + public int id1 { get; set; } + [Column(IsPrimary = true)] + public int id2 { get; set; } + public string xx { get; set; } } [Fact] public void IgnoreColumns() diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Oracle/Curd/OracleUpdateTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Oracle/Curd/OracleUpdateTest.cs index aef3d5bc..5882a1e5 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Oracle/Curd/OracleUpdateTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Oracle/Curd/OracleUpdateTest.cs @@ -48,6 +48,19 @@ namespace FreeSql.Tests.Odbc.Oracle sql = update.SetSource(items).Set(a => a.CreateTime, new DateTime(2020, 1, 1)).ToSql().Replace("\r\n", ""); Assert.Equal("UPDATE \"TB_TOPIC\" SET \"CREATETIME\" = to_timestamp('2020-01-01 00:00:00.000000','YYYY-MM-DD HH24:MI:SS.FF6') WHERE (\"ID\" IN (1,2,3,4,5,6,7,8,9,10))", sql); + + sql = g.oracle.Update().SetSource(new[] { + new ts_source_mpk { id1 = 1, id2 = 7, xx = "a1" }, + new ts_source_mpk { id1 = 1, id2 = 8, xx = "b122" } + }).NoneParameter().ToSql().Replace("\r\n", ""); + } + public class ts_source_mpk + { + [Column(IsPrimary = true)] + public int id1 { get; set; } + [Column(IsPrimary = true)] + public int id2 { get; set; } + public string xx { get; set; } } [Fact] public void IgnoreColumns() diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/PostgreSQL/Curd/PostgreSQLUpdateTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/PostgreSQL/Curd/PostgreSQLUpdateTest.cs index 9324d935..ecc43d80 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/PostgreSQL/Curd/PostgreSQLUpdateTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/PostgreSQL/Curd/PostgreSQLUpdateTest.cs @@ -49,6 +49,19 @@ namespace FreeSql.Tests.Odbc.PostgreSQL sql = update.SetSource(items).Set(a => a.CreateTime, new DateTime(2020, 1, 1)).ToSql().Replace("\r\n", ""); Assert.Equal("UPDATE \"tb_topic\" SET \"createtime\" = '2020-01-01 00:00:00.000000' WHERE (\"id\" IN (1,2,3,4,5,6,7,8,9,10))", sql); + + sql = g.pgsql.Update().SetSource(new[] { + new ts_source_mpk { id1 = 1, id2 = 7, xx = "a1" }, + new ts_source_mpk { id1 = 1, id2 = 8, xx = "b122" } + }).NoneParameter().ToSql().Replace("\r\n", ""); + } + public class ts_source_mpk + { + [Column(IsPrimary = true)] + public int id1 { get; set; } + [Column(IsPrimary = true)] + public int id2 { get; set; } + public string xx { get; set; } } [Fact] public void IgnoreColumns() diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/SqlServer/Curd/SqlServerUpdateTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/SqlServer/Curd/SqlServerUpdateTest.cs index 5e2e504e..99b73c02 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/SqlServer/Curd/SqlServerUpdateTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/SqlServer/Curd/SqlServerUpdateTest.cs @@ -51,6 +51,19 @@ namespace FreeSql.Tests.Odbc.SqlServer sql = update.SetSource(items).IgnoreColumns(a => a.TypeGuid).Set(a => a.CreateTime, new DateTime(2020, 1, 1)).ToSql().Replace("\r\n", ""); Assert.Equal("UPDATE [tb_topic] SET [CreateTime] = '2020-01-01 00:00:00.000' WHERE ([Id] IN (1,2,3,4,5,6,7,8,9,10))", sql); + + sql = g.sqlserver.Update().SetSource(new[] { + new ts_source_mpk { id1 = 1, id2 = 7, xx = "a1" }, + new ts_source_mpk { id1 = 1, id2 = 8, xx = "b122" } + }).NoneParameter().ToSql().Replace("\r\n", ""); + } + public class ts_source_mpk + { + [Column(IsPrimary = true)] + public int id1 { get; set; } + [Column(IsPrimary = true)] + public int id2 { get; set; } + public string xx { get; set; } } [Fact] public void IgnoreColumns() diff --git a/FreeSql.Tests/FreeSql.Tests/MsAccess/Curd/MsAccessUpdateTest.cs b/FreeSql.Tests/FreeSql.Tests/MsAccess/Curd/MsAccessUpdateTest.cs index 2e148df4..76c44fbc 100644 --- a/FreeSql.Tests/FreeSql.Tests/MsAccess/Curd/MsAccessUpdateTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/MsAccess/Curd/MsAccessUpdateTest.cs @@ -50,6 +50,29 @@ namespace FreeSql.Tests.MsAccess sql = update.SetSource(items).IgnoreColumns(a => a.TypeGuid).Set(a => a.CreateTime, new DateTime(2020, 1, 1)).ToSql().Replace("\r\n", ""); Assert.Equal("UPDATE [tb_topic] SET [CreateTime] = '2020-01-01 00:00:00' WHERE ([Id] IN (1,2,3,4,5,6,7,8,9,10))", sql); + + if (g.msaccess.Select().Where(a => a.id1 == 1 && a.id2 == 7).Any() == false) + g.msaccess.Insert(new ts_source_mpk { id1 = 1, id2 = 7 }).ExecuteAffrows(); + if (g.msaccess.Select().Where(a => a.id1 == 1 && a.id2 == 8).Any() == false) + g.msaccess.Insert(new ts_source_mpk { id1 = 1, id2 = 8 }).ExecuteAffrows(); + + sql = g.msaccess.Update().SetSource(new[] { + new ts_source_mpk { id1 = 1, id2 = 7, xx = "a1" }, + new ts_source_mpk { id1 = 1, id2 = 8, xx = "b122" } + }).NoneParameter().ToSql().Replace("\r\n", ""); + g.msaccess.Update().SetSource(new[] { + new ts_source_mpk { id1 = 1, id2 = 7, xx = "a1" }, + new ts_source_mpk { id1 = 1, id2 = 8, xx = "b122" } + }).NoneParameter().ExecuteAffrows(); + var testlist = g.msaccess.Select().ToList(); + } + public class ts_source_mpk + { + [Column(IsPrimary = true)] + public int id1 { get; set; } + [Column(IsPrimary = true)] + public int id2 { get; set; } + public string xx { get; set; } } [Fact] public void IgnoreColumns() diff --git a/FreeSql.Tests/FreeSql.Tests/MySql/Curd/MySqlUpdateTest.cs b/FreeSql.Tests/FreeSql.Tests/MySql/Curd/MySqlUpdateTest.cs index 95aae673..4f8cbe00 100644 --- a/FreeSql.Tests/FreeSql.Tests/MySql/Curd/MySqlUpdateTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/MySql/Curd/MySqlUpdateTest.cs @@ -79,6 +79,19 @@ namespace FreeSql.Tests.MySql Assert.Equal("UPDATE `TestEnumUpdateTb` SET `type` = 'sum211', `time` = '0001-01-01 00:00:00.000' WHERE (`id` = 0)", sql); g.mysql.Update().NoneParameter().SetSource(new TestEnumUpdateTb { id = (int)id, type = TestEnumUpdateTbType.biggit }).ExecuteAffrows(); Assert.Equal(TestEnumUpdateTbType.biggit, g.mysql.Select().Where(a => a.id == id).First()?.type); + + sql = g.mysql.Update().SetSource(new[] { + new ts_source_mpk { id1 = 1, id2 = 7, xx = "a1" }, + new ts_source_mpk { id1 = 1, id2 = 8, xx = "b122" } + }).NoneParameter().ToSql().Replace("\r\n", ""); + } + public class ts_source_mpk + { + [Column(IsPrimary = true)] + public int id1 { get; set; } + [Column(IsPrimary = true)] + public int id2 { get; set; } + public string xx { get; set; } } [Fact] public void IgnoreColumns() diff --git a/FreeSql.Tests/FreeSql.Tests/Oracle/Curd/OracleUpdateTest.cs b/FreeSql.Tests/FreeSql.Tests/Oracle/Curd/OracleUpdateTest.cs index 0df27fb9..b3413337 100644 --- a/FreeSql.Tests/FreeSql.Tests/Oracle/Curd/OracleUpdateTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/Oracle/Curd/OracleUpdateTest.cs @@ -48,6 +48,19 @@ namespace FreeSql.Tests.Oracle sql = update.SetSource(items).Set(a => a.CreateTime, new DateTime(2020, 1, 1)).ToSql().Replace("\r\n", ""); Assert.Equal("UPDATE \"TB_TOPIC\" SET \"CREATETIME\" = :p_0 WHERE (\"ID\" IN (1,2,3,4,5,6,7,8,9,10))", sql); + + sql = g.oracle.Update().SetSource(new[] { + new ts_source_mpk { id1 = 1, id2 = 7, xx = "a1" }, + new ts_source_mpk { id1 = 1, id2 = 8, xx = "b122" } + }).NoneParameter().ToSql().Replace("\r\n", ""); + } + public class ts_source_mpk + { + [Column(IsPrimary = true)] + public int id1 { get; set; } + [Column(IsPrimary = true)] + public int id2 { get; set; } + public string xx { get; set; } } [Fact] public void IgnoreColumns() diff --git a/FreeSql.Tests/FreeSql.Tests/PostgreSQL/Curd/PostgreSQLUpdateTest.cs b/FreeSql.Tests/FreeSql.Tests/PostgreSQL/Curd/PostgreSQLUpdateTest.cs index d13cd12c..1eabd7f3 100644 --- a/FreeSql.Tests/FreeSql.Tests/PostgreSQL/Curd/PostgreSQLUpdateTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/PostgreSQL/Curd/PostgreSQLUpdateTest.cs @@ -49,7 +49,21 @@ namespace FreeSql.Tests.PostgreSQL sql = update.SetSource(items).Set(a => a.CreateTime, new DateTime(2020, 1, 1)).ToSql().Replace("\r\n", ""); Assert.Equal("UPDATE \"tb_topic\" SET \"createtime\" = @p_0 WHERE (\"id\" IN (1,2,3,4,5,6,7,8,9,10))", sql); + + sql = g.pgsql.Update().SetSource(new[] { + new ts_source_mpk { id1 = 1, id2 = 7, xx = "a1" }, + new ts_source_mpk { id1 = 1, id2 = 8, xx = "b122" } + }).NoneParameter().ToSql().Replace("\r\n", ""); } + public class ts_source_mpk + { + [Column(IsPrimary = true)] + public int id1 { get; set; } + [Column(IsPrimary = true)] + public int id2 { get; set; } + public string xx { get; set; } + } + [Fact] public void IgnoreColumns() { diff --git a/FreeSql.Tests/FreeSql.Tests/SqlServer/Curd/SqlServerUpdateTest.cs b/FreeSql.Tests/FreeSql.Tests/SqlServer/Curd/SqlServerUpdateTest.cs index 4528a7ee..9dd1dea6 100644 --- a/FreeSql.Tests/FreeSql.Tests/SqlServer/Curd/SqlServerUpdateTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/SqlServer/Curd/SqlServerUpdateTest.cs @@ -60,7 +60,21 @@ namespace FreeSql.Tests.SqlServer sql = update.SetSource(items).IgnoreColumns(a => a.TypeGuid).Set(a => a.CreateTime, new DateTime(2020, 1, 1)).ToSql().Replace("\r\n", ""); Assert.Equal("UPDATE [tb_topic] SET [CreateTime] = @p_0 WHERE ([Id] IN (1,2,3,4,5,6,7,8,9,10))", sql); + + sql = g.sqlserver.Update().SetSource(new[] { + new ts_source_mpk { id1 = 1, id2 = 7, xx = "a1" }, + new ts_source_mpk { id1 = 1, id2 = 8, xx = "b122" } + }).NoneParameter().ToSql().Replace("\r\n", ""); } + public class ts_source_mpk + { + [Column(IsPrimary = true)] + public int id1 { get; set; } + [Column(IsPrimary = true)] + public int id2 { get; set; } + public string xx { get; set; } + } + [Fact] public void IgnoreColumns() { diff --git a/FreeSql.Tests/FreeSql.Tests/Sqlite/Curd/SqliteUpdateTest.cs b/FreeSql.Tests/FreeSql.Tests/Sqlite/Curd/SqliteUpdateTest.cs index d77cac96..fe4532a7 100644 --- a/FreeSql.Tests/FreeSql.Tests/Sqlite/Curd/SqliteUpdateTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/Sqlite/Curd/SqliteUpdateTest.cs @@ -50,6 +50,19 @@ namespace FreeSql.Tests.Sqlite sql = update.SetSource(items).IgnoreColumns(a => a.TypeGuid).Set(a => a.CreateTime, new DateTime(2020, 1, 1)).ToSql().Replace("\r\n", ""); Assert.Equal("UPDATE \"tb_topic\" SET \"CreateTime\" = @p_0 WHERE (\"Id\" IN (1,2,3,4,5,6,7,8,9,10))", sql); + + sql = g.sqlite.Update().SetSource(new[] { + new ts_source_mpk { id1 = 1, id2 = 7, xx = "a1" }, + new ts_source_mpk { id1 = 1, id2 = 8, xx = "b122" } + }).NoneParameter().ToSql().Replace("\r\n", ""); + } + public class ts_source_mpk + { + [Column(IsPrimary = true)] + public int id1 { get; set; } + [Column(IsPrimary = true)] + public int id2 { get; set; } + public string xx { get; set; } } [Fact] public void IgnoreColumns() diff --git a/FreeSql/FreeSql.xml b/FreeSql/FreeSql.xml index 21df8587..66b08dae 100644 --- a/FreeSql/FreeSql.xml +++ b/FreeSql/FreeSql.xml @@ -2426,180 +2426,7 @@ - - Insert/Update自动值处理 - - - - - 内置解析功能,可辅助您进行解析 - - - - - 需要您解析的表达式 - - - - - 解析后的内容 - - - - - 实体类型 - - - - - 实体配置 - - - - - 索引配置 - - - - - 实体类型 - - - - - 实体的属性 - - - - - 实体的属性配置 - - - - - 标识符,可将 CurdBefore 与 CurdAfter 进行匹配 - - - - - 操作类型 - - - - - 实体类型 - - - - - 实体类型的元数据 - - - - - 执行的 SQL - - - - - 参数化命令 - - - - - 发生的错误 - - - - - 执行SQL命令,返回的结果 - - - - - 耗时(单位:Ticks) - - - - - 耗时(单位:毫秒) - - - - - 标识符,可将 SyncStructureBeforeEventArgs 与 SyncStructureAfterEventArgs 进行匹配 - - - - - 实体类型 - - - - - 执行的 SQL - - - - - 发生的错误 - - - - - 耗时(单位:Ticks) - - - - - 耗时(单位:毫秒) - - - - - 类型 - - - - - 属性列的元数据 - - - - - 反射的属性信息 - - - - - 获取实体的属性值,也可以设置实体的属性新值 - - - - - 【开发环境必备】自动同步实体结构到数据库,程序运行中检查实体表是否存在,然后创建或修改 - - - - - 转小写同步结构 - - - - - 转大写同步结构 - - - - - 将数据库的主键、自增、索引设置导入,适用 DbFirst 模式,无须在实体类型上设置 [Column(IsPrimary)] 或者 ConfigEntity。此功能目前可用于 mysql/sqlserver/postgresql/oracle。 - 本功能会影响 IFreeSql 首次访问的速度。 - 若使用 CodeFirst 创建索引后,又直接在数据库上建了索引,若无本功能下一次 CodeFirst 迁移时数据库上创建的索引将被删除 - - - - - 不使用命令参数化执行,针对 Insert/Update + @@ -2874,6 +2701,161 @@ + + + C#:从元组集合中查找 exp1, exp2 是否存在 + SQL: + exp1 = that[0].Item1 and exp2 = that[0].Item2 OR + exp1 = that[1].Item1 and exp2 = that[1].Item2 OR + ... + 注意:当 that 为 null 或 empty 时,返回 1=0 + + + + + + + 获取c#类型,int、long + + + + + + + 获取c#类型对象 + + + + + + + 获取ado.net读取方法, GetBoolean、GetInt64 + + + + + + + 序列化 + + + + + + + 反序列化 + + + + + + + 获取数据库枚举类型,适用 PostgreSQL + + + + + + + AsType, Ctor, ClearData 三处地方需要重新加载 + + + + + AsType, Ctor, ClearData 三处地方需要重新加载 + + + + + 通过属性的注释文本,通过 xml 读取 + + + Dict:key=属性名,value=注释 + + + + 创建一个过滤器 + + + 名字 + 表达式 + + + + + 中间表,多对多 + + + + + 不进行任何处理 + + + + + 将帕斯卡命名字符串转换为下划线分隔字符串 + + BigApple -> Big_Apple + + + + + 将帕斯卡命名字符串转换为下划线分隔字符串,且转换为全大写 + + BigApple -> BIG_APPLE + + + + + 将帕斯卡命名字符串转换为下划线分隔字符串,且转换为全小写 + + BigApple -> big_apple + + + + + 将字符串转换为大写 + + BigApple -> BIGAPPLE + + + + + 将字符串转换为小写 + + BigApple -> bigapple + + + + + 将帕斯卡命名字符串转换为下划线分隔字符串 + + BigApple -> Big_Apple + + + + + + + C#: that >= between && that <= and + SQL: that BETWEEN between AND and + + + + + + + + + 注意:这个方法和 Between 有细微区别 + C#: that >= start && that < end + SQL: that >= start and that < end + + + + + + C#:从元组集合中查找 exp1, exp2 是否存在 diff --git a/Providers/FreeSql.Provider.MsAccess/Curd/MsAccessUpdate.cs b/Providers/FreeSql.Provider.MsAccess/Curd/MsAccessUpdate.cs index f54c9077..6a70a096 100644 --- a/Providers/FreeSql.Provider.MsAccess/Curd/MsAccessUpdate.cs +++ b/Providers/FreeSql.Provider.MsAccess/Curd/MsAccessUpdate.cs @@ -43,7 +43,7 @@ namespace FreeSql.MsAccess.Curd var pkidx = 0; foreach (var pk in _table.Primarys) { - if (pkidx > 0) caseWhen.Append(", "); + if (pkidx > 0) caseWhen.Append(" + '+' + "); caseWhen.Append(MsAccessUtils.GetCastSql(_commonUtils.QuoteReadColumn(pk.CsType, pk.Attribute.MapType, _commonUtils.QuoteSqlName(pk.Attribute.Name)), typeof(string))); ++pkidx; } @@ -60,7 +60,7 @@ namespace FreeSql.MsAccess.Curd var pkidx = 0; foreach (var pk in _table.Primarys) { - if (pkidx > 0) sb.Append(", "); + if (pkidx > 0) sb.Append(" + '+' + "); sb.Append(MsAccessUtils.GetCastSql(_commonUtils.FormatSql("{0}", pk.GetMapValue(d)), typeof(string))); ++pkidx; } diff --git a/Providers/FreeSql.Provider.MySql/Curd/MySqlUpdate.cs b/Providers/FreeSql.Provider.MySql/Curd/MySqlUpdate.cs index f2e29d2d..b208affd 100644 --- a/Providers/FreeSql.Provider.MySql/Curd/MySqlUpdate.cs +++ b/Providers/FreeSql.Provider.MySql/Curd/MySqlUpdate.cs @@ -79,7 +79,7 @@ namespace FreeSql.MySql.Curd var pkidx = 0; foreach (var pk in _table.Primarys) { - if (pkidx > 0) caseWhen.Append(", "); + if (pkidx > 0) caseWhen.Append(", '+', "); caseWhen.Append(_commonUtils.QuoteReadColumn(pk.CsType, pk.Attribute.MapType, _commonUtils.QuoteSqlName(pk.Attribute.Name))); ++pkidx; } @@ -97,7 +97,7 @@ namespace FreeSql.MySql.Curd var pkidx = 0; foreach (var pk in _table.Primarys) { - if (pkidx > 0) sb.Append(", "); + if (pkidx > 0) sb.Append(", '+', "); sb.Append(_commonUtils.FormatSql("{0}", pk.GetMapValue(d))); ++pkidx; } diff --git a/Providers/FreeSql.Provider.Odbc/Dameng/Curd/OdbcDamengUpdate.cs b/Providers/FreeSql.Provider.Odbc/Dameng/Curd/OdbcDamengUpdate.cs index 2b274bf4..22aa2504 100644 --- a/Providers/FreeSql.Provider.Odbc/Dameng/Curd/OdbcDamengUpdate.cs +++ b/Providers/FreeSql.Provider.Odbc/Dameng/Curd/OdbcDamengUpdate.cs @@ -39,7 +39,7 @@ namespace FreeSql.Odbc.Dameng var pkidx = 0; foreach (var pk in _table.Primarys) { - if (pkidx > 0) caseWhen.Append(" || "); + if (pkidx > 0) caseWhen.Append(" || '+' || "); caseWhen.Append(_commonUtils.QuoteReadColumn(pk.CsType, pk.Attribute.MapType, _commonUtils.QuoteSqlName(pk.Attribute.Name))); ++pkidx; } @@ -57,7 +57,7 @@ namespace FreeSql.Odbc.Dameng var pkidx = 0; foreach (var pk in _table.Primarys) { - if (pkidx > 0) sb.Append(" || "); + if (pkidx > 0) sb.Append(" || '+' || "); sb.Append(_commonUtils.FormatSql("{0}", pk.GetMapValue(d))); ++pkidx; } diff --git a/Providers/FreeSql.Provider.Odbc/Default/Curd/OdbcUpdate.cs b/Providers/FreeSql.Provider.Odbc/Default/Curd/OdbcUpdate.cs index c13928d9..b24bb642 100644 --- a/Providers/FreeSql.Provider.Odbc/Default/Curd/OdbcUpdate.cs +++ b/Providers/FreeSql.Provider.Odbc/Default/Curd/OdbcUpdate.cs @@ -36,7 +36,7 @@ namespace FreeSql.Odbc.Default var pkidx = 0; foreach (var pk in _table.Primarys) { - if (pkidx > 0) caseWhen.Append(", "); + if (pkidx > 0) caseWhen.Append(" + '+' + "); caseWhen.Append(_utils.Adapter.CastSql(_commonUtils.QuoteReadColumn(pk.CsType, pk.Attribute.MapType, _commonUtils.QuoteSqlName(pk.Attribute.Name)), _utils.Adapter.MappingOdbcTypeVarChar)); ++pkidx; } @@ -53,7 +53,7 @@ namespace FreeSql.Odbc.Default var pkidx = 0; foreach (var pk in _table.Primarys) { - if (pkidx > 0) sb.Append(", "); + if (pkidx > 0) sb.Append(" + '+' + "); sb.Append(_utils.Adapter.CastSql(_commonUtils.FormatSql("{0}", pk.GetMapValue(d)), _utils.Adapter.MappingOdbcTypeVarChar)); ++pkidx; } diff --git a/Providers/FreeSql.Provider.Odbc/GBase/Curd/OdbcGBaseUpdate.cs b/Providers/FreeSql.Provider.Odbc/GBase/Curd/OdbcGBaseUpdate.cs index e2495d19..2701cfcb 100644 --- a/Providers/FreeSql.Provider.Odbc/GBase/Curd/OdbcGBaseUpdate.cs +++ b/Providers/FreeSql.Provider.Odbc/GBase/Curd/OdbcGBaseUpdate.cs @@ -38,7 +38,7 @@ namespace FreeSql.Odbc.GBase var pkidx = 0; foreach (var pk in _table.Primarys) { - if (pkidx > 0) caseWhen.Append(" || "); + if (pkidx > 0) caseWhen.Append(" || '+' || "); caseWhen.Append(_commonUtils.QuoteReadColumn(pk.CsType, pk.Attribute.MapType, _commonUtils.QuoteSqlName(pk.Attribute.Name))).Append("::varchar"); ++pkidx; } @@ -56,7 +56,7 @@ namespace FreeSql.Odbc.GBase var pkidx = 0; foreach (var pk in _table.Primarys) { - if (pkidx > 0) sb.Append(" || "); + if (pkidx > 0) sb.Append(" || '+' || "); sb.Append(_commonUtils.FormatSql("{0}", pk.GetMapValue(d))).Append("::varchar"); ++pkidx; } diff --git a/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlUpdate.cs b/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlUpdate.cs index c2234536..b0892779 100644 --- a/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlUpdate.cs +++ b/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlUpdate.cs @@ -73,7 +73,7 @@ namespace FreeSql.Odbc.MySql var pkidx = 0; foreach (var pk in _table.Primarys) { - if (pkidx > 0) caseWhen.Append(", "); + if (pkidx > 0) caseWhen.Append(", '+', "); caseWhen.Append(_commonUtils.QuoteReadColumn(pk.CsType, pk.Attribute.MapType, _commonUtils.QuoteSqlName(pk.Attribute.Name))); ++pkidx; } @@ -91,7 +91,7 @@ namespace FreeSql.Odbc.MySql var pkidx = 0; foreach (var pk in _table.Primarys) { - if (pkidx > 0) sb.Append(", "); + if (pkidx > 0) sb.Append(", '+', "); sb.Append(_commonUtils.FormatSql("{0}", pk.GetMapValue(d))); ++pkidx; } diff --git a/Providers/FreeSql.Provider.Odbc/Oracle/Curd/OdbcOracleUpdate.cs b/Providers/FreeSql.Provider.Odbc/Oracle/Curd/OdbcOracleUpdate.cs index 629d3d89..97f4f680 100644 --- a/Providers/FreeSql.Provider.Odbc/Oracle/Curd/OdbcOracleUpdate.cs +++ b/Providers/FreeSql.Provider.Odbc/Oracle/Curd/OdbcOracleUpdate.cs @@ -39,7 +39,7 @@ namespace FreeSql.Odbc.Oracle var pkidx = 0; foreach (var pk in _table.Primarys) { - if (pkidx > 0) caseWhen.Append(" || "); + if (pkidx > 0) caseWhen.Append(" || '+' || "); caseWhen.Append(_commonUtils.QuoteReadColumn(pk.CsType, pk.Attribute.MapType, _commonUtils.QuoteSqlName(pk.Attribute.Name))); ++pkidx; } @@ -57,7 +57,7 @@ namespace FreeSql.Odbc.Oracle var pkidx = 0; foreach (var pk in _table.Primarys) { - if (pkidx > 0) sb.Append(" || "); + if (pkidx > 0) sb.Append(" || '+' || "); sb.Append(_commonUtils.FormatSql("{0}", pk.GetMapValue(d))); ++pkidx; } diff --git a/Providers/FreeSql.Provider.Odbc/PostgreSQL/Curd/OdbcPostgreSQLUpdate.cs b/Providers/FreeSql.Provider.Odbc/PostgreSQL/Curd/OdbcPostgreSQLUpdate.cs index f62def8f..fb8ce06a 100644 --- a/Providers/FreeSql.Provider.Odbc/PostgreSQL/Curd/OdbcPostgreSQLUpdate.cs +++ b/Providers/FreeSql.Provider.Odbc/PostgreSQL/Curd/OdbcPostgreSQLUpdate.cs @@ -72,7 +72,7 @@ namespace FreeSql.Odbc.PostgreSQL var pkidx = 0; foreach (var pk in _table.Primarys) { - if (pkidx > 0) caseWhen.Append(" || "); + if (pkidx > 0) caseWhen.Append(" || '+' || "); caseWhen.Append(_commonUtils.QuoteReadColumn(pk.CsType, pk.Attribute.MapType, _commonUtils.QuoteSqlName(pk.Attribute.Name))).Append("::varchar"); ++pkidx; } @@ -90,7 +90,7 @@ namespace FreeSql.Odbc.PostgreSQL var pkidx = 0; foreach (var pk in _table.Primarys) { - if (pkidx > 0) sb.Append(" || "); + if (pkidx > 0) sb.Append(" || '+' || "); sb.Append(_commonUtils.FormatSql("{0}", pk.GetMapValue(d))).Append("::varchar"); ++pkidx; } diff --git a/Providers/FreeSql.Provider.Odbc/SqlServer/Curd/OdbcSqlServerUpdate.cs b/Providers/FreeSql.Provider.Odbc/SqlServer/Curd/OdbcSqlServerUpdate.cs index aa57a9de..c6b1f146 100644 --- a/Providers/FreeSql.Provider.Odbc/SqlServer/Curd/OdbcSqlServerUpdate.cs +++ b/Providers/FreeSql.Provider.Odbc/SqlServer/Curd/OdbcSqlServerUpdate.cs @@ -77,7 +77,7 @@ namespace FreeSql.Odbc.SqlServer var pkidx = 0; foreach (var pk in _table.Primarys) { - if (pkidx > 0) caseWhen.Append(", "); + if (pkidx > 0) caseWhen.Append(" + '+' + "); caseWhen.Append("cast(").Append(_commonUtils.QuoteReadColumn(pk.CsType, pk.Attribute.MapType, _commonUtils.QuoteSqlName(pk.Attribute.Name))).Append(" as varchar)"); ++pkidx; } @@ -94,7 +94,7 @@ namespace FreeSql.Odbc.SqlServer var pkidx = 0; foreach (var pk in _table.Primarys) { - if (pkidx > 0) sb.Append(", "); + if (pkidx > 0) sb.Append(" + '+' + "); sb.Append("cast(").Append(_commonUtils.FormatSql("{0}", pk.GetMapValue(d))).Append(" as varchar)"); ++pkidx; } diff --git a/Providers/FreeSql.Provider.Oracle/Curd/OracleUpdate.cs b/Providers/FreeSql.Provider.Oracle/Curd/OracleUpdate.cs index 17cc8a5a..d24b384d 100644 --- a/Providers/FreeSql.Provider.Oracle/Curd/OracleUpdate.cs +++ b/Providers/FreeSql.Provider.Oracle/Curd/OracleUpdate.cs @@ -39,7 +39,7 @@ namespace FreeSql.Oracle.Curd var pkidx = 0; foreach (var pk in _table.Primarys) { - if (pkidx > 0) caseWhen.Append(" || "); + if (pkidx > 0) caseWhen.Append(" || '+' || "); caseWhen.Append(_commonUtils.QuoteReadColumn(pk.CsType, pk.Attribute.MapType, _commonUtils.QuoteSqlName(pk.Attribute.Name))); ++pkidx; } @@ -57,7 +57,7 @@ namespace FreeSql.Oracle.Curd var pkidx = 0; foreach (var pk in _table.Primarys) { - if (pkidx > 0) sb.Append(" || "); + if (pkidx > 0) sb.Append(" || '+' || "); sb.Append(_commonUtils.FormatSql("{0}", pk.GetMapValue(d))); ++pkidx; } diff --git a/Providers/FreeSql.Provider.PostgreSQL/Curd/PostgreSQLUpdate.cs b/Providers/FreeSql.Provider.PostgreSQL/Curd/PostgreSQLUpdate.cs index 18773870..ea1320c7 100644 --- a/Providers/FreeSql.Provider.PostgreSQL/Curd/PostgreSQLUpdate.cs +++ b/Providers/FreeSql.Provider.PostgreSQL/Curd/PostgreSQLUpdate.cs @@ -81,7 +81,7 @@ namespace FreeSql.PostgreSQL.Curd var pkidx = 0; foreach (var pk in _table.Primarys) { - if (pkidx > 0) caseWhen.Append(" || "); + if (pkidx > 0) caseWhen.Append(" || '+' || "); if (string.IsNullOrEmpty(InternalTableAlias) == false) caseWhen.Append(InternalTableAlias).Append("."); caseWhen.Append(_commonUtils.QuoteReadColumn(pk.CsType, pk.Attribute.MapType, _commonUtils.QuoteSqlName(pk.Attribute.Name))).Append("::varchar"); ++pkidx; @@ -100,7 +100,7 @@ namespace FreeSql.PostgreSQL.Curd var pkidx = 0; foreach (var pk in _table.Primarys) { - if (pkidx > 0) sb.Append(" || "); + if (pkidx > 0) sb.Append(" || '+' || "); sb.Append(_commonUtils.FormatSql("{0}", pk.GetMapValue(d))).Append("::varchar"); ++pkidx; } diff --git a/Providers/FreeSql.Provider.SqlServer/Curd/SqlServerUpdate.cs b/Providers/FreeSql.Provider.SqlServer/Curd/SqlServerUpdate.cs index 4b69d8c5..bfb9e139 100644 --- a/Providers/FreeSql.Provider.SqlServer/Curd/SqlServerUpdate.cs +++ b/Providers/FreeSql.Provider.SqlServer/Curd/SqlServerUpdate.cs @@ -78,7 +78,7 @@ namespace FreeSql.SqlServer.Curd var pkidx = 0; foreach (var pk in _table.Primarys) { - if (pkidx > 0) caseWhen.Append(", "); + if (pkidx > 0) caseWhen.Append(" + '+' + "); caseWhen.Append("cast(").Append(_commonUtils.QuoteReadColumn(pk.CsType, pk.Attribute.MapType, _commonUtils.QuoteSqlName(pk.Attribute.Name))).Append(" as varchar)"); ++pkidx; } @@ -95,7 +95,7 @@ namespace FreeSql.SqlServer.Curd var pkidx = 0; foreach (var pk in _table.Primarys) { - if (pkidx > 0) sb.Append(", "); + if (pkidx > 0) sb.Append(" + '+' + "); sb.Append("cast(").Append(_commonUtils.FormatSql("{0}", pk.GetMapValue(d))).Append(" as varchar)"); ++pkidx; } diff --git a/Providers/FreeSql.Provider.Sqlite/Curd/SqliteUpdate.cs b/Providers/FreeSql.Provider.Sqlite/Curd/SqliteUpdate.cs index 8988d244..507d4e6f 100644 --- a/Providers/FreeSql.Provider.Sqlite/Curd/SqliteUpdate.cs +++ b/Providers/FreeSql.Provider.Sqlite/Curd/SqliteUpdate.cs @@ -35,11 +35,11 @@ namespace FreeSql.Sqlite.Curd caseWhen.Append(_commonUtils.QuoteReadColumn(pk.CsType, pk.Attribute.MapType, _commonUtils.QuoteSqlName(pk.Attribute.Name))); return; } - caseWhen.Append("CONCAT("); + caseWhen.Append("("); var pkidx = 0; foreach (var pk in _table.Primarys) { - if (pkidx > 0) caseWhen.Append(", "); + if (pkidx > 0) caseWhen.Append(" || '+' || "); caseWhen.Append(_commonUtils.QuoteReadColumn(pk.CsType, pk.Attribute.MapType, _commonUtils.QuoteSqlName(pk.Attribute.Name))); ++pkidx; } @@ -53,11 +53,11 @@ namespace FreeSql.Sqlite.Curd sb.Append(_commonUtils.FormatSql("{0}", _table.Primarys.First().GetMapValue(d))); return; } - sb.Append("CONCAT("); + sb.Append("("); var pkidx = 0; foreach (var pk in _table.Primarys) { - if (pkidx > 0) sb.Append(", "); + if (pkidx > 0) sb.Append(" || '+' || "); sb.Append(_commonUtils.FormatSql("{0}", pk.GetMapValue(d))); ++pkidx; }