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))