mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-04-22 18:52:50 +08:00
- 优化 IUpdate ToSql;
This commit is contained in:
parent
3f77ea3a63
commit
0e82d6c3e3
@ -800,14 +800,5 @@
|
||||
<param name="that"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Microsoft.Extensions.DependencyInjection.FreeSqlRepositoryDependencyInjection.AddFreeRepository(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.Action{FreeSql.FluentDataFilter},System.Reflection.Assembly[])">
|
||||
<summary>
|
||||
批量注入 Repository,可以参考代码自行调整
|
||||
</summary>
|
||||
<param name="services"></param>
|
||||
<param name="globalDataFilter"></param>
|
||||
<param name="assemblies"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
</members>
|
||||
</doc>
|
||||
|
@ -1,6 +1,8 @@
|
||||
using FreeSql.DataAnnotations;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using Xunit;
|
||||
@ -12,7 +14,19 @@ namespace FreeSql.Tests
|
||||
[Fact]
|
||||
public void DeleteCascade()
|
||||
{
|
||||
var fsql = g.sqlite;
|
||||
using (var fsql = new FreeSqlBuilder()
|
||||
.UseConnectionString(DataType.Sqlite, "data source=:memory:")
|
||||
.UseAutoSyncStructure(true)
|
||||
.UseNoneCommandParameter(true)
|
||||
.UseMonitorCommand(cmd => Trace.WriteLine(cmd.CommandText))
|
||||
.Build())
|
||||
{
|
||||
fsql.CodeFirst.GetTableByEntity(typeof(DeleteCascadeUserGroup)).ColumnsByCs
|
||||
.Where(a => !new[] { typeof(string), typeof(int), typeof(DateTime), typeof(long) }.Contains(a.Value.Attribute.MapType))
|
||||
.ToArray();
|
||||
|
||||
fsql.GlobalFilter.Apply<DeleteCascadeUserGroup>("soft_delete", a => a.IsDeleted == false);
|
||||
|
||||
fsql.Delete<DeleteCascadeUserGroup>().Where("1=1").ExecuteAffrows();
|
||||
fsql.Delete<DeleteCascadeUserExt>().Where("1=1").ExecuteAffrows();
|
||||
fsql.Delete<DeleteCascadeUser>().Where("1=1").ExecuteAffrows();
|
||||
@ -27,6 +41,10 @@ namespace FreeSql.Tests
|
||||
userRepo.DbContextOptions.EnableCascadeSave = true;
|
||||
userextRepo.DbContextOptions.EnableCascadeSave = true;
|
||||
tagRepo.DbContextOptions.EnableCascadeSave = true;
|
||||
groupRepo.DbContextOptions.EnableGlobalFilter = false;
|
||||
userRepo.DbContextOptions.EnableGlobalFilter = false;
|
||||
userextRepo.DbContextOptions.EnableGlobalFilter = false;
|
||||
tagRepo.DbContextOptions.EnableGlobalFilter = false;
|
||||
|
||||
//OneToOne InDatabase
|
||||
fsql.Delete<DeleteCascadeUser>().Where("1=1").ExecuteAffrows();
|
||||
@ -332,6 +350,7 @@ namespace FreeSql.Tests
|
||||
Assert.False(userextRepo.Select.Any());
|
||||
Assert.False(fsql.Select<DeleteCascadeUserTag>().Any());
|
||||
}
|
||||
}
|
||||
public class DeleteCascadeUser
|
||||
{
|
||||
[Column(IsIdentity = true)]
|
||||
@ -339,6 +358,7 @@ namespace FreeSql.Tests
|
||||
public string Username { get; set; }
|
||||
public string Password { get; set; }
|
||||
public int GroupId { get; set; }
|
||||
public bool IsDeleted { get; set; }
|
||||
|
||||
[Navigate(nameof(Id))]
|
||||
public DeleteCascadeUserExt UserExt { get; set; }
|
||||
@ -350,6 +370,7 @@ namespace FreeSql.Tests
|
||||
[Column(IsPrimary = true)]
|
||||
public int UserId { get; set; }
|
||||
public string Remark { get; set; }
|
||||
public bool IsDeleted { get; set; }
|
||||
|
||||
[Navigate(nameof(UserId))]
|
||||
public DeleteCascadeUser User { get; set; }
|
||||
@ -359,6 +380,7 @@ namespace FreeSql.Tests
|
||||
[Column(IsIdentity = true)]
|
||||
public int Id { get; set; }
|
||||
public string GroupName { get; set; }
|
||||
public bool IsDeleted { get; set; }
|
||||
|
||||
[Navigate(nameof(DeleteCascadeUser.GroupId))]
|
||||
public List<DeleteCascadeUser> Users { get; set; }
|
||||
@ -368,6 +390,7 @@ namespace FreeSql.Tests
|
||||
[Column(IsIdentity = true)]
|
||||
public int Id { get; set; }
|
||||
public string TagName { get; set; }
|
||||
public bool IsDeleted { get; set; }
|
||||
|
||||
[Navigate(ManyToMany = typeof(DeleteCascadeUserTag))]
|
||||
public List<DeleteCascadeUser> Users { get; set; }
|
||||
@ -376,6 +399,7 @@ namespace FreeSql.Tests
|
||||
{
|
||||
public int UserId { get; set; }
|
||||
public int TagId { get; set; }
|
||||
public bool IsDeleted { get; set; }
|
||||
|
||||
[Navigate(nameof(UserId))]
|
||||
public DeleteCascadeUser User { get; set; }
|
||||
|
@ -1,4 +1,4 @@
|
||||
using FreeSql.DataAnnotations;
|
||||
using FreeSql.DataAnnotations;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
@ -174,6 +174,9 @@ namespace FreeSql.Tests.Sqlite
|
||||
|
||||
sql = update.Set(a => a.Clicks == null).Where(a => a.Id == 1).ToSql().Replace("\r\n", "");
|
||||
Assert.Equal("UPDATE \"tb_topic\" SET \"Clicks\" = NULL WHERE (\"Id\" = 1)", sql);
|
||||
|
||||
sql = update.SetIf(false, a => a.Clicks == null).Where(a => a.Id == 1).ToSql()?.Replace("\r\n", "");
|
||||
Assert.Null(sql);
|
||||
}
|
||||
[Fact]
|
||||
public void SetRaw()
|
||||
|
@ -177,6 +177,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
sb.Append(sql).Append("\r\n\r\n;\r\n\r\n");
|
||||
});
|
||||
if (sb.Length > 0) sb.Remove(sb.Length - 9, 9);
|
||||
if (sb.Length == 0) return null;
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
|
@ -797,6 +797,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
sb2.Append(sql).Append("\r\n\r\n;\r\n\r\n");
|
||||
});
|
||||
if (sb2.Length > 0) sb2.Remove(sb2.Length - 9, 9);
|
||||
if (sb2.Length == 0) return null;
|
||||
return sb2.ToString();
|
||||
}
|
||||
|
||||
@ -866,6 +867,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
public virtual void ToSqlExtension110(StringBuilder sb, bool isAsTableSplited)
|
||||
{
|
||||
if (_where.Length == 0 && _source.Any() == false) return;
|
||||
if (_source.Any() == false && _set.Length == 0 && _setIncr.Length == 0) return;
|
||||
|
||||
if (_table.AsTableImpl != null && isAsTableSplited == false && _source == _sourceOld && _source.Any())
|
||||
{
|
||||
|
@ -20,7 +20,7 @@ namespace FreeSql.ClickHouse.Curd
|
||||
|
||||
public override string ToSql()
|
||||
{
|
||||
return base.ToSql().Replace("DELETE FROM ", "ALTER TABLE ").Replace(" WHERE ", " DELETE WHERE ");
|
||||
return base.ToSql()?.Replace("DELETE FROM ", "ALTER TABLE ").Replace(" WHERE ", " DELETE WHERE ");
|
||||
}
|
||||
|
||||
#if net40
|
||||
|
@ -68,6 +68,7 @@ namespace FreeSql.ClickHouse.Curd
|
||||
public override void ToSqlExtension110(StringBuilder sb, bool isAsTableSplited)
|
||||
{
|
||||
if (_where.Length == 0 && _source.Any() == false) return;
|
||||
if (_source.Any() == false && _set.Length == 0 && _setIncr.Length == 0) return;
|
||||
|
||||
if (_table.AsTableImpl != null && isAsTableSplited == false && _source == _sourceOld && _source.Any())
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user