Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.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# 基于复合键的关系模型_C#_.net Core_Ef Core 2.0 - Fatal编程技术网

C# 基于复合键的关系模型

C# 基于复合键的关系模型,c#,.net-core,ef-core-2.0,C#,.net Core,Ef Core 2.0,我在EF核心项目中有两个实体:商店和员工 Employee有一个引用存储的密钥,并且还有一个活动标志 当我从DbContext中提取存储时,我只希望看到那些拥有引用相关存储的密钥并且具有活动标志的员工 我被困在如何基于活动标志进行限制的问题上 最简单的示例如下所示: public class Employee { public Guid Id {get; set;} [ForeignKey("Store")] public Guid StoreId{ get;

我在EF核心项目中有两个实体:商店和员工

Employee有一个引用存储的密钥,并且还有一个活动标志

当我从DbContext中提取存储时,我只希望看到那些拥有引用相关存储的密钥并且具有活动标志的员工

我被困在如何基于活动标志进行限制的问题上

最简单的示例如下所示:

public class Employee
{
      public Guid Id {get; set;}
      [ForeignKey("Store")]
      public Guid StoreId{ get; set; }
      public bool IsActive {get; set; }
}

public class Store
{
      public Guid Id {get; set;
      public List<Employee> Employees{get; set;}
}
公共类员工
{
公共Guid Id{get;set;}
[外键(“存储”)]
公共Guid存储ID{get;set;}
公共bool IsActive{get;set;}
}
公共类商店
{
公共Guid Id{get;set;
公共列表雇员{get;set;}
}
我如何才能产生我想要的行为?目前,这将使每一位员工,无论是否活跃。

类似的情况

    using( MyDBContext db = new MyDBContext()){
        var activeEmployees = (from em in db.Employees
                              join s in db.Store on em.StoreId == s.Id
                              where em.IsActive == true
                              select em).ToList();
    }
您可以设置一个

只需将以下内容添加到您的
OnModelCreating
覆盖中:

modelBuilder.Entity<Employee>()
    .HasQueryFilter(e => e.IsActive);
modelBuilder.Entity()
.HasQueryFilter(e=>e.IsActive);

不幸的是,EF Core不支持查询级筛选器。您所能做的就是。因此,如果您希望这是每个特定查询,或者希望查询
Active==false
,恐怕您必须按照另一个答案中的建议使用投影。

query是正确的,但有没有定义此关系的方法(通过DBContext或模型注释)这样我们就不需要在每次检索数据时都使用查询了?我们不希望Store使用非活动记录对此不确定,但您不能运行一次查询,然后只使用这些记录吗?我们当然可以,但应该有一种更干净的方法。这离我需要的要近得多,但我仍然需要能够查看inact我在其他查询中为员工提供了帮助,只是从来没有在存储上下文中提供过。您可以将查询筛选器应用于关系吗?很遗憾,没有。您所能做的就是使用
IgnoreQueryFilters()
禁用特定查询的筛选器。您可以使用表拆分的其他实体。您可以使用此查询筛选器。