Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# EFCore 3.1添加默认阴影属性并将其用于softdelete_C#_.net_Entity Framework_.net Core_Ef Core 3.0 - Fatal编程技术网

C# EFCore 3.1添加默认阴影属性并将其用于softdelete

C# 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

我正在用C#.NET Core 3.1和EFCore开发一个应用程序。基于,我尝试添加新列并使用Queryfilter

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