我有以下幾種類型:查詢在EF4基類型代碼優先
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表。我絕對想要一個單獨的汽車和摩托車表(也可能是一個車輛基地屬性表)。什麼是最好的方法來做到這一點?
EF不是我的東西,但是如果將它添加到上下文中,您是否可以通過接口獲得一組設置?將'Vehicle'改成'IVehicle'? – Eli