Base Type Request in EF4 Code-First

I have the following types:

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; }
}

And I have the code-first DBC text:

public MyDbContext: DbContext { 
    public DbSet<Car> Cars { get; set; }
    public DbSet<Motorcycle> Motorcycles { get; set; }
}

This works great if I request a car or motorcycle directly ...

var dbContext = new MyDbContext();
var cars = dbContext.Set<Car>().Where(x=> x.TopSpeed>10); // <-- THIS WORKS

But if I need a list of all cars, be it a car or a moto, I would like to do this:

var dbContext = new MyDbContext();
var vehicles = dbContext.Set<Vehicle>().Where(x=> x.TopSpeed>10); // <-- THIS DOES NOT WORK

When I try to execute the above code, I get an exception:

System.InvalidOperationException: Object type The vehicle is not part of the model for the current context.

... Vehicle . . , . , . (, , ). ?

+5
3

DBSet Vehicle MyDbContext.

public MyDbContext: DbContext { 
    public DbSet<Car> Cars { get; set; }
    public DbSet<Motorcycle> Motorcycles { get; set; }
    public DbSet<Vehicle> Vehicles { set; get; }
}

var vehicles = dbContext.Set<Vehicle>().Where(x=> x.TopSpeed>10);

, Key (ID {ClassName}ID). ! (, .)

public abstract class Vehicle
{
    public int ID { set; get; }
    public double TopSpeed { get; set; }
}

EDIT:

Entity Framework . Discriminator, , . , , , , "Discriminator". "" "".

enter image description here

, . Entity Framework .

, Fluent API .

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Car>().ToTable("Cars");
        modelBuilder.Entity<Motorcycle>().ToTable("Motorcycles");

        base.OnModelCreating(modelBuilder);
    }

enter image description here

, ,

 var vehicles = dbContext.Set<Vehicle>().Where(x => x.TopSpeed > 150).ToList();

enter image description here

, MotorCycle Car.

, , .

+11

DBSet? , .

0

DataAnnotation.Schema.Table( "TableName" ) ( ) Discriminator , Fluent API.

0

All Articles