软删除修改--pre

IRC_NewDev
hang 2024-12-11 15:16:06 +08:00
parent 9bd0a23734
commit 4330afd683
3 changed files with 47 additions and 8 deletions

View File

@ -5,9 +5,6 @@ namespace IRaCIS.Core.Domain.Models;
public partial class TrialStatusDetail : BaseAddAuditEntity
{
#region 导航属性
[JsonIgnore]
public List<EnrollDetail> IntoGroupDetails { get; set; }
[JsonIgnore]
public Trial Trial { get; set; }
#endregion

View File

@ -3,6 +3,7 @@ using IRaCIS.Core.Domain.Models;
using IRaCIS.Core.Infra.EFCore.Common;
using IRaCIS.Core.Infrastructure.Encryption;
using IRaCIS.Core.Infrastructure.Extention;
using Microsoft.EntityFrameworkCore.Metadata.Internal;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using Newtonsoft.Json;
using System.ComponentModel;
@ -77,11 +78,11 @@ public class IRaCISDBContext : DbContext
});
modelBuilder.Entity<Trial>(entity =>
{
{
//项目术语配置
entity.OwnsMany(x => x.TrialObjectNameList, ownedNavigationBuilder =>
{
ownedNavigationBuilder.ToJson() ;
ownedNavigationBuilder.ToJson();
});
});
@ -144,13 +145,54 @@ public class IRaCISDBContext : DbContext
base.OnModelCreating(modelBuilder);
//软删除筛选器通常依赖于实体模型的完整定义(例如属性映射、继承关系等)
foreach (var entityType in modelBuilder.Model.GetEntityTypes())
{
// 软删除配置
if (typeof(ISoftDelete).IsAssignableFrom(entityType.ClrType))
{
entityType.AddSoftDeleteQueryFilter();
//entityType.AddSoftDeleteQueryFilter();
// 动态创建表达式e => e.IsDeleted==false
var parameter = Expression.Parameter(entityType.ClrType, "e");
var property = Expression.Property(parameter, nameof(ISoftDelete.IsDeleted));
var filter = Expression.Lambda(
Expression.Equal(property, Expression.Constant(false)),
parameter);
// 应用全局查询筛选器
modelBuilder.Entity(entityType.ClrType).HasQueryFilter(filter);
//Console.WriteLine($"实体应用软删除:{entityType.ClrType.Name}");
}
foreach (var navigation in entityType.GetNavigations())
{
if (navigation.IsCollection) continue;
// 配置基于导航属性的软删除查询筛选器
if (typeof(ISoftDelete).IsAssignableFrom(navigation.TargetEntityType.ClrType))
{
var clrType = entityType.ClrType;
var targetType = navigation.TargetEntityType.ClrType;
//e => e.Subject.IsDeleted==false
var parameterNav = Expression.Parameter(clrType, "e");
var navigationProperty = Expression.Property(parameterNav, navigation.Name);
var navigationFilter = Expression.Equal(
Expression.Property(navigationProperty, nameof(ISoftDelete.IsDeleted)),
Expression.Constant(false));
var filterNav = Expression.Lambda(navigationFilter, parameterNav);
modelBuilder.Entity(clrType).HasQueryFilter(filterNav);
//Console.WriteLine($"实体应用软删除:{entityType.ClrType.Name} 导航属性{filterNav}");
}
}
if (typeof(Entity).IsAssignableFrom(entityType.ClrType))
@ -588,7 +630,7 @@ public class TestLength : Entity
public string Name { get; set; }
[StringLength(1000)]
public string[] StringList { get; set; }=new string[] { };
public string[] StringList { get; set; } = new string[] { };
public List<DateTime> DateTimeList { get; set; } = new List<DateTime>();

View File

@ -21,7 +21,7 @@ namespace IRaCIS.Core.Infra.EFCore.EntityConfigration
//对于全局修改的任务而言,会关联多个全局访视阅片结果(因为同一个访视结果,会被多个全局修改)
//subject 删除了,但是任务没删除,导致的查询问题
builder.HasQueryFilter(b => b.Subject.IsDeleted == false);
//builder.HasQueryFilter(b => b.Subject.IsDeleted == false);
}
}