有没有一种方法可以先使用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

08-15 22:12