tengo los siguientes tipos:Consulta por tipo de base en EF4 Código-Primera
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; }
}
Y tengo un código de primera DBContext:
public MyDbContext: DbContext {
public DbSet<Car> Cars { get; set; }
public DbSet<Motorcycle> Motorcycles { get; set; }
}
Esto funciona muy bien si la consulta para un coche o directamente moto ...
var dbContext = new MyDbContext();
var cars = dbContext.Set<Car>().Where(x=> x.TopSpeed>10); // <-- THIS WORKS
Pero si quiero una lista de todos los vehículos, ya sea coche o moto, me gustaría hacer esto:
var dbContext = new MyDbContext();
var vehicles = dbContext.Set<Vehicle>().Where(x=> x.TopSpeed>10); // <-- THIS DOES NOT WORK
Cuando intento el código anterior, me sale una excepción:
System.InvalidOperationException: El tipo de entidad vehículo no es parte del modelo para el contexto actual.
Eso tiene perfecto sentido ... No agregué el vehículo al contexto. Añadí coche y moto. En este punto, no estoy seguro de qué hacer. Intenté agregar Vehículo a mi contexto, pero eso combinó las tablas para automóvil y moto en una sola tabla de Vehículo. Definitivamente quiero una mesa separada para autos y motos (y posiblemente una mesa para las propiedades de base del vehículo también). ¿Cuál es la mejor manera de hacer esto?
EF no es lo mío, pero ¿podría obtener un conjunto a través de la interfaz si lo agrega al contexto, p. cambiar 'Vehicle' a' IVehicle'? – Eli