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 844e7210..c89f2c76 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/Curd/MySqlUpdateTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/Curd/MySqlUpdateTest.cs @@ -1,6 +1,7 @@ using FreeSql.DataAnnotations; using System; using System.Collections.Generic; +using System.Linq; using Xunit; namespace FreeSql.Tests.MySqlConnector @@ -180,7 +181,14 @@ namespace FreeSql.Tests.MySqlConnector [Fact] public void ExecuteAffrows() { + var items = new List(); + for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newtitle{a}", Clicks = a * 100 }); + var time = DateTime.Now; + var items222 = g.mysql.Select().Where(a => a.CreateTime > time).Limit(10).ToList(); + + update.SetSource(items.First()).NoneParameter().ExecuteAffrows(); + update.SetSource(items).NoneParameter().ExecuteAffrows(); } [Fact] public void ExecuteUpdated() diff --git a/FreeSql.Tests/FreeSql.Tests/MySql/Curd/MySqlUpdateTest.cs b/FreeSql.Tests/FreeSql.Tests/MySql/Curd/MySqlUpdateTest.cs index 55808901..a1f6758a 100644 --- a/FreeSql.Tests/FreeSql.Tests/MySql/Curd/MySqlUpdateTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/MySql/Curd/MySqlUpdateTest.cs @@ -1,6 +1,7 @@ using FreeSql.DataAnnotations; using System; using System.Collections.Generic; +using System.Linq; using Xunit; namespace FreeSql.Tests.MySql @@ -181,7 +182,14 @@ namespace FreeSql.Tests.MySql [Fact] public void ExecuteAffrows() { + var items = new List(); + for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newtitle{a}", Clicks = a * 100 }); + var time = DateTime.Now; + var items222 = g.mysql.Select().Where(a => a.CreateTime > time).Limit(10).ToList(); + + update.SetSource(items.First()).NoneParameter().ExecuteAffrows(); + update.SetSource(items).NoneParameter().ExecuteAffrows(); } [Fact] public void ExecuteUpdated() diff --git a/FreeSql.Tests/FreeSql.Tests/PostgreSQL/Curd/PostgreSQLUpdateTest.cs b/FreeSql.Tests/FreeSql.Tests/PostgreSQL/Curd/PostgreSQLUpdateTest.cs index 8d26b835..ff270d94 100644 --- a/FreeSql.Tests/FreeSql.Tests/PostgreSQL/Curd/PostgreSQLUpdateTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/PostgreSQL/Curd/PostgreSQLUpdateTest.cs @@ -1,6 +1,7 @@ using FreeSql.DataAnnotations; using System; using System.Collections.Generic; +using System.Linq; using Xunit; namespace FreeSql.Tests.PostgreSQL @@ -120,7 +121,11 @@ namespace FreeSql.Tests.PostgreSQL [Fact] public void ExecuteAffrows() { + var items = new List(); + for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newtitle{a}", Clicks = a * 100 }); + update.SetSource(items.First()).NoneParameter().ExecuteAffrows(); + update.SetSource(items).NoneParameter().ExecuteAffrows(); } [Fact] public void ExecuteUpdated() diff --git a/FreeSql.Tests/FreeSql.Tests/SqlServer/Curd/SqlServerUpdateTest.cs b/FreeSql.Tests/FreeSql.Tests/SqlServer/Curd/SqlServerUpdateTest.cs index 7d6de208..88ad4cb0 100644 --- a/FreeSql.Tests/FreeSql.Tests/SqlServer/Curd/SqlServerUpdateTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/SqlServer/Curd/SqlServerUpdateTest.cs @@ -2,6 +2,7 @@ using FreeSql.DataAnnotations; using FreeSql.Tests.DataContext.SqlServer; using System; using System.Collections.Generic; +using System.Linq; using Xunit; namespace FreeSql.Tests.SqlServer @@ -131,7 +132,14 @@ namespace FreeSql.Tests.SqlServer [Fact] public void ExecuteAffrows() { + var items = new List(); + for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newtitle{a}", Clicks = a * 100 }); + var time = DateTime.Now; + var items222 = g.sqlserver.Select().Where(a => a.CreateTime > time).Limit(10).ToList(); + + update.SetSource(items.First()).NoneParameter().ExecuteAffrows(); + update.SetSource(items).NoneParameter().ExecuteAffrows(); } [Fact] public void ExecuteUpdated() diff --git a/FreeSql.Tests/FreeSql.Tests/Sqlite/Curd/SqliteUpdateTest.cs b/FreeSql.Tests/FreeSql.Tests/Sqlite/Curd/SqliteUpdateTest.cs index e6ac094e..e6c74398 100644 --- a/FreeSql.Tests/FreeSql.Tests/Sqlite/Curd/SqliteUpdateTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/Sqlite/Curd/SqliteUpdateTest.cs @@ -1,6 +1,7 @@ using FreeSql.DataAnnotations; using System; using System.Collections.Generic; +using System.Linq; using Xunit; namespace FreeSql.Tests.Sqlite @@ -124,7 +125,14 @@ namespace FreeSql.Tests.Sqlite [Fact] public void ExecuteAffrows() { + var items = new List(); + for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newtitle{a}", Clicks = a * 100 }); + var time = DateTime.Now; + var items222 = g.sqlite.Select().Where(a => a.CreateTime > time).Limit(10).ToList(); + + update.SetSource(items.First()).NoneParameter().ExecuteAffrows(); + update.SetSource(items).NoneParameter().ExecuteAffrows(); } [Fact] public void ExecuteUpdated() diff --git a/FreeSql/Internal/CommonProvider/UpdateProvider.cs b/FreeSql/Internal/CommonProvider/UpdateProvider.cs index 5b8e1071..049e6cbd 100644 --- a/FreeSql/Internal/CommonProvider/UpdateProvider.cs +++ b/FreeSql/Internal/CommonProvider/UpdateProvider.cs @@ -566,6 +566,7 @@ namespace FreeSql.Internal.CommonProvider protected abstract void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys); protected abstract void ToSqlWhen(StringBuilder sb, ColumnInfo[] primarys, object d); + protected virtual void ToSqlCaseWhenEnd(StringBuilder sb, ColumnInfo col) { } public IUpdate AsTable(Func tableRule) { @@ -658,7 +659,11 @@ namespace FreeSql.Internal.CommonProvider if (isnull == false) isnull = value == null || value == DBNull.Value; } cwsb.Append(" END"); - if (isnull == false) sb.Append(cwsb.ToString()); + if (isnull == false) + { + ToSqlCaseWhenEnd(cwsb, col); + sb.Append(cwsb.ToString()); + } else sb.Append("NULL"); cwsb.Clear(); diff --git a/Providers/FreeSql.Provider.PostgreSQL/Curd/PostgreSQLUpdate.cs b/Providers/FreeSql.Provider.PostgreSQL/Curd/PostgreSQLUpdate.cs index 88554df2..b1fc6740 100644 --- a/Providers/FreeSql.Provider.PostgreSQL/Curd/PostgreSQLUpdate.cs +++ b/Providers/FreeSql.Provider.PostgreSQL/Curd/PostgreSQLUpdate.cs @@ -136,5 +136,14 @@ namespace FreeSql.PostgreSQL.Curd } sb.Append(")"); } + + protected override void ToSqlCaseWhenEnd(StringBuilder sb, ColumnInfo col) + { + if (_noneParameter == false) return; + var dbtype = _commonUtils.CodeFirst.GetDbInfo(col.Attribute.MapType)?.dbtype; + if (dbtype == null) return; + + sb.Append("::").Append(dbtype); + } } }