- 修复 Repository/DbContext 批量修改可能无效的 bug;#709

This commit is contained in:
2881099 2021-06-05 14:52:02 +08:00
parent 2b982ff350
commit 092bbe47dd
7 changed files with 63 additions and 1 deletions

View File

@ -133,7 +133,11 @@ namespace FreeSql
if (isLiveUpdate || oldinfo.changeType == EntityChangeType.Update) if (isLiveUpdate || oldinfo.changeType == EntityChangeType.Update)
{ {
if (states.Any()) if (states.Any())
{
await funcUpdate(isLiveUpdate); await funcUpdate(isLiveUpdate);
if (info?.changeType == EntityChangeType.Update)
flagFuncUpdateLaststate = true;
}
} }
if (info != null) if (info != null)

View File

@ -148,7 +148,11 @@ namespace FreeSql
if (isLiveUpdate || oldinfo.changeType == EntityChangeType.Update) if (isLiveUpdate || oldinfo.changeType == EntityChangeType.Update)
{ {
if (states.Any()) if (states.Any())
{
funcUpdate(isLiveUpdate); funcUpdate(isLiveUpdate);
if (info?.changeType == EntityChangeType.Update)
flagFuncUpdateLaststate = true;
}
} }
if (info != null) if (info != null)

View File

@ -2,12 +2,34 @@ using FreeSql.DataAnnotations;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Threading.Tasks;
using Xunit; using Xunit;
namespace FreeSql.Tests namespace FreeSql.Tests
{ {
public class RepositoryTests public class RepositoryTests
{ {
/// <summary>
/// ¸üÒ»ÌõÎÞ·¨¸üС£
/// </summary>
/// <returns></returns>
[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<AddUpdateInfo>();
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] [Fact]
public void AddUpdate() public void AddUpdate()

View File

@ -171,6 +171,8 @@ namespace FreeSql.Tests.PostgreSQLExpression
var sql16 = select.Where(a => a.testFieldJArray.Count() > 0).Limit(10).ToList(); 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 sql17 = select.Where(a => a.testFieldJArray.LongCount() > 0).Limit(10).ToList();
var sql18 = select.Where(a => a.testFieldJArray.Count > 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] [Fact]

View File

@ -174,6 +174,26 @@ namespace FreeSql
/// <returns></returns> /// <returns></returns>
public static ICaseWhenEnd Case() => SqlExtExtensions.Case(); public static ICaseWhenEnd Case() => SqlExtExtensions.Case();
/// <summary> /// <summary>
/// case when .. then .. end
/// </summary>
/// <typeparam name="TInput"></typeparam>
/// <typeparam name="TOutput"></typeparam>
/// <param name="input"></param>
/// <param name="dict"></param>
/// <returns></returns>
public static TOutput CaseDict<TInput, TOutput>(TInput input, [RawValue] Dictionary<TInput, TOutput> 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;
}
/// <summary>
/// MySql group_concat(distinct .. order by .. separator ..) /// MySql group_concat(distinct .. order by .. separator ..)
/// </summary> /// </summary>
/// <param name="column"></param> /// <param name="column"></param>

View File

@ -1232,6 +1232,16 @@
</summary> </summary>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:FreeSql.SqlExt.CaseDict``2(``0,System.Collections.Generic.Dictionary{``0,``1})">
<summary>
case when .. then .. end
</summary>
<typeparam name="TInput"></typeparam>
<typeparam name="TOutput"></typeparam>
<param name="input"></param>
<param name="dict"></param>
<returns></returns>
</member>
<member name="M:FreeSql.SqlExt.GroupConcat(System.Object)"> <member name="M:FreeSql.SqlExt.GroupConcat(System.Object)">
<summary> <summary>
MySql group_concat(distinct .. order by .. separator ..) MySql group_concat(distinct .. order by .. separator ..)

View File

@ -424,7 +424,7 @@ and not exists(select 1 from all_constraints where constraint_name = a.index_nam
dropSequence(seqname); dropSequence(seqname);
if (seqcol.Item3) 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}"); _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 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)) sb.Append("execute immediate 'CREATE OR REPLACE TRIGGER ").Append(_commonUtils.QuoteSqlName(tiggerName))