有没有一种方法可以先使用EF6 /代码在导航属性上设置过滤器?
我想要实现类似于以下内容,其中Farm.Pigs返回类型等于pig的动物集合(但不首先从数据库中加载整个集合-也不将它们存储在单独的表中)。这可能吗?
public class Farm {
public int Id { get; set; }
public virtual ICollection<Animal> Pigs { get; set; }
public virtual ICollection<Animal> Cows { get; set; }
}
public class Animal {
public int Id { get; set; }
public int FarmId? { get; set; }
public virtual Farm Farm { get; set; }
public string Name { get; set; }
}
public enum AnimalType {
Pig, Cow
}
更新资料
将更新移至新问题:Entity Framework One-Many TPH Mapping
最佳答案
您无法按照您要求的方式执行此操作,这是实体框架的当前限制。
如果您创建继承关系,即可以通过其他方式实现它。
public class Animal {
public int Id { get; set; }
public AnimalType Type { get; set; }
public string Name { get; set; }
}
public class Pig : Animal { ... }
public class Cow : Animal { ... }
然后,您可以按照以下文章中的说明配置每个层次结构表(TPH):
http://weblogs.asp.net/manavi/archive/2010/12/24/inheritance-mapping-strategies-with-entity-framework-code-first-ctp5-part-1-table-per-hierarchy-tph.aspx