实体框架双向依赖关系预查询
本文关键字:关系 查询 依赖 框架 实体 | 更新日期: 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();
}
}
}