2011-10-06 62 views
5

我有一个包含调查实体集合的用户实体。我希望关联在关系中包含一个过滤器,例如'IsCompleted',所以无论何时我急于加载(或延迟加载该集合),都会发生这种过滤。实体框架4(使用过滤器配置的关联)

这是我们控制的东西吗?

谢谢!

回答

0

如果您使用的是支持视图的数据库后端,则可以考虑使用视图作为调查实体集合的来源。利用数据库的强大功能为您进行过滤。

0

为实体加载关联始终只是获取它们全部,无论是因为您在初始查询期间使用了“包含”,事实上称为“加载”,还是延迟加载导致了它。导航属性种类的概念假定了这种行为。

E.J. Brennan's answer会运作良好。如果您不担心在后台加载所有调查(由于性能/内存原因等原因),那么您也可以考虑通过实体上的部分类定义创建单独的属性,以返回经过筛选的列表。

public partial class User 
{ 
    public ICollection<Survey> CompletedSurveys 
    { 
     get { return Surveys.Where(s => s.IsCompleted); } 
    } 
} 
+0

这似乎是一个重要的缺失功能,其他ORM的支持,它在企业应用程序中非常关键。谢谢。 – Marco

+0

它是如何失踪的功能?如图所示,通过部分类将过滤的集合添加到实体是相当简单的。你是否期待它成为EDMX设计师的一个选择?与此相关的问题是实体模型仅涉及模式和关系。这是EF存在的关系的一个人为因素,EF所知道的是它生成的实体对象类带有方便的导航属性。自定义关联过滤器超出了实体模型定义的范围,并且无论如何都可以用LINQ /代码轻松解决。 –

+0

您提供的示例过滤了内存中的集合,并且在处理具有属于聚合的关联集合的大量记录时,您正在将自己绘制到一个角落。 – Marco