实体框架过滤的导航属性

时间:2013-12-18 16:27:09

标签: c# entity-framework ef-code-first entity-framework-6

有没有办法首先使用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

1 个答案:

答案 0 :(得分:2)

你不能按照你提出的方式做到这一点,这是实体框架的当前限制。

如果你创建了一个继承关系,即

,你可以用不同的方式实现它
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