EntityFramework关系one-many-(在此处插入帮助) - 急切加载

时间:2014-11-21 09:40:24

标签: c# entity-framework

我有4个模特

  1. 汽车
  2. 类型A
  3. 的TypeB
  4. 工厂可以有很多车,一辆车可以有TypeA和TypeB。 TypeA和TypeB都可以存在于汽车上 即使用eager-loading 所以我的模型看起来像

    public class Factory
    {
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int FactoryID {get;set;}
    
        public ICollection<Car> Cars {get;set;}
    }
    
    public class Car
    {
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int CarID {get;set;}
    
        public int FactoryID {get;set;}
        public Factory Factory {get;set;}
    
        //The Types
        public TypeA TypeA {get;set;}
        public TypeB TypeB {get;set;}
    }
    
    public class TypeA
    {
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int TypeAID {get;set;}
    
        [Key, ForeignKey("Car")]
        public int CarID {get;set;}
        public Car Car {get;set;}
    }
    
    public class TypeB
    {
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int TypeBID {get;set;}
    
        [Key, ForeignKey("Car")]
        public int CarID {get;set;}
        public Car Car {get;set;}
    }
    

    这是我的问题。如何将TypeA和TypeB加载到我的工厂对象中(使用Eager-Loading)

    Factory factory = db.Factory.Where(f => f.FactoryID == 1).Include(f => f.Cars.Select(c => c.TypeA) ... .FirstOrDefault();
    

    因为我不能说

    Include(f=>f.Cars.Select(...).Select(...))
    

2 个答案:

答案 0 :(得分:1)

您可以拥有多个包含语句。没有必要只有一个。

答案 1 :(得分:1)

只需链接include语句:

Factory factory = db.Factory.Where(f => f.FactoryID == 1)
                            .Include(f => f.Cars.Select(c => c.TypeA))
                            .Include(f => f.Cars.Select(c => c.TypeB))
                            ....;

顺便说一下: 为TypeATypeB引入基类可能是有意义的 - 或者甚至只使用一个类,因为我没有看到它们之间的差异。