我有以下类型:
public abstract class Vehicle {
public int Id { get; set; }
public double TopSpeed { get; set; }
}
public class Car : Vehicle {
public int Doors { get; set; }
}
public class Motorcycle : Vehicle {
public string Color { get; set; }
}
我有一个代码优先的 DBContext:
public MyDbContext: DbContext {
public DbSet<Car> Cars { get; set; }
public DbSet<Motorcycle> Motorcycles { get; set; }
}
如果我直接查询汽车或摩托车,这非常有用......
var dbContext = new MyDbContext();
var cars = dbContext.Set<Car>().Where(x=> x.TopSpeed>10); // <-- THIS WORKS
但是,如果我想要所有车辆的列表,无论是汽车还是摩托车,我想这样做:
var dbContext = new MyDbContext();
var vehicles = dbContext.Set<Vehicle>().Where(x=> x.TopSpeed>10); // <-- THIS DOES NOT WORK
当我尝试上面的代码时,我得到一个异常:
System.InvalidOperationException :实体类型 Vehicle 不是当前上下文模型的一部分。
这很有意义......我没有将 Vehicle 添加到上下文中。我添加了汽车和摩托车。在这一点上,我不知道该怎么办。我尝试将 Vehicle 添加到我的上下文中,但这会将 car 和 moto 的表合并到一个 Vehicle 表中。我绝对想要一个单独的汽车和摩托车表(可能还有一个用于车辆基础属性的表)。最好的方法是什么?