基于公共接口从查询中过滤EF对象图

时间:2012-12-04 18:08:00

标签: entity-framework

如果我有一个由所有实体实现的公共接口,例如:

public interface IEntity {
    int Id { get; set; }
    DateTime ValidFrom { get; set; }
    DateTime? ValidTo { get; set; }
}

如果ValidTo为null,是否可以过滤掉作为查询一部分返回的对象 - 仅返回仍然有效的对象。

我从中获得这个想法是Julia Lerman和Rowan Miller在PEF中使用类似的东西:DbContext在断开连接的实体上设置状态,但是他们通过状态管理器来执行它,这允许它们遍历实现特定的所有实体interface - 我想做类似的事情,但是涉及子实体的查询。

我正在使用SQL Server 2012,EF5和.Net 4.5。

1 个答案:

答案 0 :(得分:0)

您引用的示例依赖于接受接口作为泛型类型参数的ChangeTracker.Entries<T>()方法。当然这一切都发生在内存中,没有涉及到SQL的翻译。

在将linq转换为SQL时,实体框架(尚未)支持接口,主要是因为DbSet<T>必须基于具体的类。

您唯一的机会是创建一个基本类型而不是一个接口,并让您的实体派生出来。