From 092bbe47ddd6ee99aaf82581ae07af68f5d79984 Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Sat, 5 Jun 2021 14:52:02 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E4=BF=AE=E5=A4=8D=20Repository/DbContext?= =?UTF-8?q?=20=E6=89=B9=E9=87=8F=E4=BF=AE=E6=94=B9=E5=8F=AF=E8=83=BD?= =?UTF-8?q?=E6=97=A0=E6=95=88=E7=9A=84=20bug=EF=BC=9B#709?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FreeSql.DbContext/DbContext/DbContextAsync.cs | 4 ++++ FreeSql.DbContext/DbContext/DbContextSync.cs | 4 ++++ .../RepositoryTests.cs | 22 +++++++++++++++++++ .../PostgreSQLExpression/OtherTest.cs | 2 ++ .../FreeSqlGlobalExpressionCallExtensions.cs | 20 +++++++++++++++++ FreeSql/FreeSql.xml | 10 +++++++++ .../Oracle/OdbcOracleCodeFirst.cs | 2 +- 7 files changed, 63 insertions(+), 1 deletion(-) diff --git a/FreeSql.DbContext/DbContext/DbContextAsync.cs b/FreeSql.DbContext/DbContext/DbContextAsync.cs index 61736375..83fab920 100644 --- a/FreeSql.DbContext/DbContext/DbContextAsync.cs +++ b/FreeSql.DbContext/DbContext/DbContextAsync.cs @@ -133,7 +133,11 @@ namespace FreeSql if (isLiveUpdate || oldinfo.changeType == EntityChangeType.Update) { if (states.Any()) + { await funcUpdate(isLiveUpdate); + if (info?.changeType == EntityChangeType.Update) + flagFuncUpdateLaststate = true; + } } if (info != null) diff --git a/FreeSql.DbContext/DbContext/DbContextSync.cs b/FreeSql.DbContext/DbContext/DbContextSync.cs index 1591af90..e5aad882 100644 --- a/FreeSql.DbContext/DbContext/DbContextSync.cs +++ b/FreeSql.DbContext/DbContext/DbContextSync.cs @@ -148,7 +148,11 @@ namespace FreeSql if (isLiveUpdate || oldinfo.changeType == EntityChangeType.Update) { if (states.Any()) + { funcUpdate(isLiveUpdate); + if (info?.changeType == EntityChangeType.Update) + flagFuncUpdateLaststate = true; + } } if (info != null) diff --git a/FreeSql.Tests/FreeSql.Tests.DbContext/RepositoryTests.cs b/FreeSql.Tests/FreeSql.Tests.DbContext/RepositoryTests.cs index 684d00ec..ef14b310 100644 --- a/FreeSql.Tests/FreeSql.Tests.DbContext/RepositoryTests.cs +++ b/FreeSql.Tests/FreeSql.Tests.DbContext/RepositoryTests.cs @@ -2,12 +2,34 @@ using FreeSql.DataAnnotations; using System; using System.Collections.Generic; using System.Linq; +using System.Threading.Tasks; using Xunit; namespace FreeSql.Tests { public class RepositoryTests { + /// + /// 更一条无法更新。 + /// + /// + [Fact] + public async Task Updatemysql() + { + var item1 = new AddUpdateInfo(); + g.mysql.Insert(item1).ExecuteAffrows(); + var item2 = new AddUpdateInfo(); + g.mysql.Insert(item2).ExecuteAffrows(); + var item3 = new AddUpdateInfo(); + g.mysql.Insert(item3).ExecuteAffrows(); + + var repos = g.mysql.GetGuidRepository(); + var items = repos.Select.WhereDynamic(new[] { item1, item2, item3 }).ToList(); + items[0].Title = "88"; + //items[1].Title = "88"; + items[2].Title = "88"; + int x = await repos.UpdateAsync(items); + } [Fact] public void AddUpdate() diff --git a/FreeSql.Tests/FreeSql.Tests/PostgreSQL/PostgreSQLExpression/OtherTest.cs b/FreeSql.Tests/FreeSql.Tests/PostgreSQL/PostgreSQLExpression/OtherTest.cs index d25aa43e..62792d53 100644 --- a/FreeSql.Tests/FreeSql.Tests/PostgreSQL/PostgreSQLExpression/OtherTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/PostgreSQL/PostgreSQLExpression/OtherTest.cs @@ -171,6 +171,8 @@ namespace FreeSql.Tests.PostgreSQLExpression var sql16 = select.Where(a => a.testFieldJArray.Count() > 0).Limit(10).ToList(); var sql17 = select.Where(a => a.testFieldJArray.LongCount() > 0).Limit(10).ToList(); var sql18 = select.Where(a => a.testFieldJArray.Count > 0).Limit(10).ToList(); + + var sql19 = select.First(a => a.testFieldJToken["a"]); } [Fact] diff --git a/FreeSql/Extensions/FreeSqlGlobalExpressionCallExtensions.cs b/FreeSql/Extensions/FreeSqlGlobalExpressionCallExtensions.cs index 1d14724f..c199da58 100644 --- a/FreeSql/Extensions/FreeSqlGlobalExpressionCallExtensions.cs +++ b/FreeSql/Extensions/FreeSqlGlobalExpressionCallExtensions.cs @@ -174,6 +174,26 @@ namespace FreeSql /// public static ICaseWhenEnd Case() => SqlExtExtensions.Case(); /// + /// case when .. then .. end + /// + /// + /// + /// + /// + /// + public static TOutput CaseDict(TInput input, [RawValue] Dictionary dict) + { + var ec = expContext.Value; + var sb = new StringBuilder(); + sb.Append("case"); + foreach (var kv in dict) + sb.Append(" when ").Append(ec.ParsedContent["input"]).Append(" = ").Append(ec.FormatSql(kv.Key)) + .Append(" then ").Append(ec.FormatSql(kv.Value)); + sb.Append(" end"); + ec.Result = sb.ToString(); + return default; + } + /// /// MySql group_concat(distinct .. order by .. separator ..) /// /// diff --git a/FreeSql/FreeSql.xml b/FreeSql/FreeSql.xml index 892888fe..9c849a52 100644 --- a/FreeSql/FreeSql.xml +++ b/FreeSql/FreeSql.xml @@ -1232,6 +1232,16 @@ + + + case when .. then .. end + + + + + + + MySql group_concat(distinct .. order by .. separator ..) diff --git a/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleCodeFirst.cs b/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleCodeFirst.cs index 77f7d095..0c7eb91d 100644 --- a/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleCodeFirst.cs +++ b/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleCodeFirst.cs @@ -424,7 +424,7 @@ and not exists(select 1 from all_constraints where constraint_name = a.index_nam dropSequence(seqname); if (seqcol.Item3) { - var startWith = _orm.Ado.ExecuteScalar(CommandType.Text, _commonUtils.FormatSql(" select 1 from all_tab_columns where owner={0} and table_name={1} and column_name={2}", tbname[0], tbname[1], colname2)) == null ? 1 : + var startWith = _orm.Ado.ExecuteScalar(CommandType.Text, _commonUtils.FormatSql(" select 1 from all_tab_columns where owner={0} and table_name={1} and column_name={2}", tbname[0], tbname[1], seqcol.Item1.Attribute.Name)) == null ? 1 : _orm.Ado.ExecuteScalar(CommandType.Text, $" select nvl(max({colname2})+1,1) from {tbname2}"); sb.Append("execute immediate 'CREATE SEQUENCE ").Append(_commonUtils.QuoteSqlName(seqname)).Append(" start with ").Append(startWith).Append("';\r\n"); sb.Append("execute immediate 'CREATE OR REPLACE TRIGGER ").Append(_commonUtils.QuoteSqlName(tiggerName))