如果我有一个由所有实体实现的公共接口,例如:
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。
答案 0 :(得分:0)
您引用的示例依赖于接受接口作为泛型类型参数的ChangeTracker.Entries<T>()
方法。当然这一切都发生在内存中,没有涉及到SQL的翻译。
在将linq转换为SQL时,实体框架(尚未)支持接口,主要是因为DbSet<T>
必须基于具体的类。
您唯一的机会是创建一个基本类型而不是一个接口,并让您的实体派生出来。