Наследование таблиц по типам с EF 4.1 Fluent Code First

У меня есть довольно простой набор таблиц базы данных, например:

Vehicle
 Id
 RegNo

Car
 Id (FK of Vehicle.Id)
 OtherStuff

Bike
 Id (FK of Vehicle.Id)
 MoreStuff

Моя модель класса как и следовало ожидать: автомобиль является абстрактным классом, а затем его подклассами являются автомобиль и велосипед.

Я настроил свою конфигурацию EF4.1 Code First следующим образом:

class VehicleConfiguration : EntityTypeConfiguration<Vehicle> {
    public VehicleConfiguration() {
        ToTable("Vehicles");
        Property(x => x.Id);
        Property(x => x.RegNo);
        HasKey(x => x.Id);
    }
}

class CarConfiguration : EntityTypeConfiguration<Car> {
    public CarConfiguration() {
        ToTable("Cars");
        Property(x => x.OtherStuff);
    }
}

class BikeConfiguration : EntityTypeConfiguration<Bike> {
    public BikeConfiguration() {
        ToTable("Bikes");
        Property(x => x.MoreStuff);
    }
}

Однако я получаю множество странных исключений когда EF пытался построить свою конфигурацию модели.

В настоящее время он выбрасывает это:

System.Data.EntityCommandExecutionException: An error occurred while executing the command definition. See the inner exception for details. ---> System.Data.SqlClient.SqlException: Invalid column name 'Discriminator'.

Откуда он получает это имя столбца? Этого нет ни в моем коде, ни в самой базе данных. Это должно быть какое-то соглашение, которое берет на себя управление. Как мне проинструктировать EF использовать таблицу для каждого типа?

Если я удалю ключевое слово abstract из моего класса Vehicle (что я сделал в качестве проверки работоспособности где-то вдоль строки), я получу другое исключение, подобное следующему :

(35,10) : error 3032: Problem in mapping fragments starting at lines 30, 35:EntityTypes AcmeCorp.Car, AcmeCorp.Bike are being mapped to the same rows in table Vehicles. Mapping conditions can be used to distinguish the rows that these types are mapped to.

Я явно что-то ужасно не так делаю, но что? Я следил за документами MSDN и всеми другими статьями TPT + EF4.1, которые смог найти!

8
задан Christian Mark 21 October 2013 в 01:30
поделиться