Ich habe folgende Typen:Querying von Basistyp in EF4-Code-First
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; }
}
Und ich habe einen Code-first DbContext:
public MyDbContext: DbContext {
public DbSet<Car> Cars { get; set; }
public DbSet<Motorcycle> Motorcycles { get; set; }
}
Dies funktioniert gut, wenn ich für ein Auto abfragen oder moto direkt ...
var dbContext = new MyDbContext();
var cars = dbContext.Set<Car>().Where(x=> x.TopSpeed>10); // <-- THIS WORKS
Aber wenn ich eine Liste aller Fahrzeuge will, ob Auto oder moto, würde ich mag, dies zu tun:
var dbContext = new MyDbContext();
var vehicles = dbContext.Set<Vehicle>().Where(x=> x.TopSpeed>10); // <-- THIS DOES NOT WORK
Wenn ich den obigen Code versuchen, erhalte ich eine Ausnahme:
System.InvalidOperationException: Die Fahrzeuge Entitätstyp ist nicht Teil des Modells für den aktuellen Kontext.
Das macht Sinn ... Ich habe Fahrzeug nicht zum Kontext hinzugefügt. Ich habe Auto und Motorrad hinzugefügt. An diesem Punkt bin ich mir nicht sicher, was ich tun soll. Ich habe versucht, Fahrzeug zu meinem Kontext hinzuzufügen, aber das kombinierte die Tabellen für Auto und Motorrad in einen Fahrzeugtisch. Ich möchte auf jeden Fall einen separaten Tisch für Autos und Motorräder (und möglicherweise auch einen Tisch für die Fahrzeugbasis Eigenschaften). Was ist der beste Weg, dies zu tun?
EF ist nicht mein Ding, aber könnten Sie über die Schnittstelle einen Satz bekommen, wenn Sie es zum Kontext hinzufügen, z. Wechsel von "Fahrzeug" zu "IVehicle"? – Eli