实体框架双向依赖关系预查询

本文关键字:关系 查询 依赖 框架 实体 | 更新日期: 2023-09-27 18:37:18

我有EF存储库,其中有表:

public DbSet<Request > Request { get; set; }
public DbSet<Approval> Approvals { get; set; }

我可以在我的存储库上下文中定义如何查询它们:

IQueryable<Approval> IRepository.Approvals {
    get { return Approvals.Where(a => !a.Flagged); }
}

因此,当我查询我的批准时,它们现在总是不会被标记:

_repository.Approvals.DoWhatEverWithThese() // these are always not flagged

另一方面,我有一个附有批准列表的对象。

public class Request {
     public virtual List<Approval> Approvals { get; set; }
}

当我直接从请求中获取批准时,他们在里面标记了批准。我怎样才能预先选择批准,他们不会在里面标记项目。

我已经尝试了域对象的扩展方法和[NotMapped]属性,但这些会出错。

public static IEnumerable<Approval> NotFlaggedApprovals(this Request request) {
    return request.Approvals.Where(a => !a.Flagged);
}
[NotMapped]
public List<Approval> NotFlaggedApprovals{
    get { return Approvals == null ? new List<Approval>() : Approvals.Where(a => !a.Flagged).ToList(); }
} 

LINQ to Entities does not recognize the method 'NotFlaggedApprovals' method, and this method cannot be translated into a store expression.

如何预选这些?所以我不必总是这样写,很多样板:

_repository.Approvals.Where(a => !a.Flagged)

实体框架双向依赖关系预查询

您是否尝试将未映射的属性放入请求对象中?

public partial class Request 
{
    public virtual List<Approval> Approvals { get; set; }
    [NotMapped]
    public List<Approval> NotFlaggedApprovals
    {
        get 
        { 
            return Approvals == null ? new List<Approval>() : Approvals.Where(a => !a.Flagged).ToList(); 
        }
    } 
}