C# EFCore 3.1添加默认阴影属性并将其用于softdelete
我正在用C#.NET Core 3.1和EFCore开发一个应用程序。基于,我尝试添加新列并使用QueryfilterC# EFCore 3.1添加默认阴影属性并将其用于softdelete,c#,.net,entity-framework,.net-core,ef-core-3.0,C#,.net,Entity Framework,.net Core,Ef Core 3.0,我正在用C#.NET Core 3.1和EFCore开发一个应用程序。基于,我尝试添加新列并使用Queryfilter protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); modelBuilder.ApplyConfiguration(new UserEnti
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.ApplyConfiguration(new UserEntityTypeConfiguration());
....
//Other configurations
...
// Assures consistent naming and configuration of audit fields.
foreach (IMutableEntityType entityType in modelBuilder.Model.GetEntityTypes().Where(item => !item.IsOwned()))
{
//Settings related to softdelete
modelBuilder.Entity(entityType.Name).Property<bool>(nameof(DefaultColumnName.IsDeleted)).HasDefaultValue(false);
var IsDeletedProperty = entityType.FindProperty(nameof(DefaultColumnName.IsDeleted));
if (IsDeletedProperty != null && IsDeletedProperty.ClrType == typeof(bool))
{
var parameter = Expression.Parameter(entityType.ClrType, "p");
var prop = Expression.Property(parameter, IsDeletedProperty.PropertyInfo);
var filter = Expression.Lambda(Expression.Not(prop), parameter);
MutableEntityTypeExtensions.SetQueryFilter(entityType, filter);
}
}
根据我的调查,此错误发生在这条线路上,但我不知道如何解决此问题
var prop = Expression.Property(parameter, IsDeletedProperty.PropertyInfo);
谁能告诉我如何解决这个问题吗?阴影属性不是类的真实属性,因此没有关联的
属性info
或字段信息。如中所述:
可以通过ChangeTracker
API获取和更改阴影属性值
可以通过EF.Property
static方法在LINQ查询中引用阴影属性
第二种方法也适用于过滤表达式。所以你需要像这样的属性访问器
EF.Property<bool>(p, "IsDeleted")
EF.Property<bool>(p, "IsDeleted")
var prop = Expression.Call(
typeof(EF), nameof(EF.Property), new[] { typeof(bool) },
parameter, Expression.Constant(IsDeletedProperty.Name));