Я пытаюсь реализовать наследование классов в .NET, используя Entity Framework 4.1 и MySQL в качестве базы данных, с подходом, основанным на коде.Приведенная ниже модель работает с SQL Server, но в MySQL происходит сбой со следующей ошибкой:
Schema specified is not valid. Errors:
(11,6) : error 0064: Facet 'MaxLength' must not be specified for type 'mediumtext'.
Модель представляет собой простой классический пример:
public abstract class Vehicle
{
public int Id { get; set; }
public int Year { get; set; }
}
public class Car : Vehicle
{
public string CarProperty { get; set; }
}
public class Bike : Vehicle
{
public string BikeProperty { get; set; }
}
public class Db : DbContext
{
public DbSet<Vehicle> Vehicles { get; set; }
public DbSet<Car> Cars { get; set; }
public DbSet<Bike> Bikes { get; set; }
}
В SQL Server создаются толькотаблица с именем Vehicles
со столбцами: Id
, Year
, Model
и Discriminator
;нет таблиц для автомобилей или мотоциклов.В MySQL база данных даже не создается (если я удаляю класс "Car", он создает - так что это не проблема разрешения или чего-то в этом роде).
Любая помощь будет признательна!Спасибо.
ОБНОВЛЕНИЕ 1: Я пытался использовать подход таблиц к иерархии к отношениям, переключаясь на контекст ниже, но он дал мне еще одну ошибку: Can't create table 'aimpa.#sql-da8_2c' (errno: 150)
.
public class Db : DbContext
{
public DbSet<Vehicle> Vehicles { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Vehicle>()
.Map<Car>(o => o.ToTable("Cars"))
.Map<Bike>(o=>o.ToTable("Bikes"));
}
}
ОБНОВЛЕНИЕ 2: Я отправил сообщение об ошибке в команду разработчиков MySQL, потому что я не знаю, что еще я могу сделать.Кажется, что это должно работать, но это не так.Постоянная ссылка: http://bugs.mysql.com/63920.
ОБНОВЛЕНИЕ 3: Я переключился на NHibertnate 3.2, чтобы проверить это.Кажется, работает просто отлично.Я лучше посмотрю на этот ORM, но я бы предпочел остаться с EF.
ОБНОВЛЕНИЕ 4: На официальном форуме MySQL я получил ответ сообщаем, что исправление для этой ошибки находится в обзоре.Должно быть исправлено в ближайшее время.