Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.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# 禁用导航属性的softDelete查询筛选器_C#_.net Core_Entity Framework Core_Soft Delete - Fatal编程技术网

C# 禁用导航属性的softDelete查询筛选器

C# 禁用导航属性的softDelete查询筛选器,c#,.net-core,entity-framework-core,soft-delete,C#,.net Core,Entity Framework Core,Soft Delete,我使用Ef Core 2.1,其中启用了软删除查询过滤器 在某些情况下,我希望从实体检索软删除的导航属性,但无法检索数据(导航属性为null,因为它是软删除的) 我将此(于2017年编写)作为参考,并声明: 筛选器不能包含对导航属性的引用 我想知道是否有办法使这种行为成为可能 public class Form { public int Id { get; set; } public virtual Sprint Sprint {get; set;} } public cl

我使用Ef Core 2.1,其中启用了软删除查询过滤器

在某些情况下,我希望从实体检索软删除的导航属性,但无法检索数据(导航属性为null,因为它是软删除的)

我将此(于2017年编写)作为参考,并声明:

筛选器不能包含对导航属性的引用

我想知道是否有办法使这种行为成为可能

public class Form {

    public int Id { get; set; }

    public virtual Sprint Sprint {get; set;}
}

public class Sprint: ISoftDeleteable {

    public int Id { get; set; }

    public string Name {get; set;}
}

// Indicates that every model that implements this interface should use soft delete.
public interface ISoftDeleteable
{ 

}

 // Both statements have returned null.
 Sprint sprint = applicationDbContext.Forms.FirstOrDefault(f => f.Id == 1).Sprint;
 Sprint sprint = applicationDbContext.Forms.IgnoreQueryFilters().FirstOrDefault(f => f.Id == 1).Sprint;
作为补充说明,我希望声明我在StartUp.cs中使用了一个延迟加载代理

services.AddDbContext<ApplicationDbContext>(options => 
    options.UseLazyLoadingProxies().UseSqlServer(connectionString));
services.AddDbContext(选项=>
options.UseLazyLoadingProxies().UseSqlServer(connectionString));
而不是使用“Include()”和“thenclude()”,因为我的模型比这里给出的示例更复杂。使用include将使代码更加复杂和不可维护。

试试这个

var data=DbContext.Set().IgnoreQueryFilters().ToList();

var data=DbContext.TableName.IgnoreQueryFilters().ToList();

您是否尝试过
.IgnoreQueryFilters()
?请参阅文章的编辑版本。我曾尝试使用IgnoreQueryFilters,但它似乎对嵌套属性有效。您需要包括导航属性
dbContext.Forms.Include(f=>f.Sprint).IgnoreQueryFilters().FirstOrDefault(f=>f.Id==1.Sprint)。如果我已经使用了延迟加载代理,那么这是必需的吗?是否尝试包含导航属性?只是想知道你需要延迟加载的用例是什么?请参阅我文章的编辑版本。我曾尝试使用IgnoreQueryFilters,但它似乎对嵌套属性有效。您必须将属性(例如IsDelete)声明为bool,当记录为软删除时,将IsDelete属性更改为True并设置查询筛选器。例如:modelBuilder.Entity().HasQueryFilter(a=>!a.IsDelete);我已经这样做了。我面临的问题是,当我想检索软删除导航属性时。applicationDbContext.Forms.IgnoreQueryFilters().Include(a=>a.Sprint).FirstOrDefault(f=>f.Id==1).Sprint;你的建议行得通。但我的模型比我给出的例子更复杂。因此,使用“Include()”和“thanclude()”将更加复杂和不可维护。我的问题是,如果我已经在startup.cs中使用了“UseLazyLoadingProxies()”,为什么需要使用“include()”