Необработанное исключение после обновления до Entity Framework 4.3.1

Ошибка:

Необработанное исключение :System.Data.SqlClient.SqlException :Операция завершилась неудачно, поскольку индекс или статистика с именем «IX _ID» уже существует в таблице «Частные уроки макияжа».

Модель (Упрощенная, создание отдельного тестового проекта для отладки):

public abstract class Lesson
{
    public Guid ID { get; set; }
    public string Room { get; set; }
    public TimeSpan Time { get; set; }
    public int Duration { get; set; }
}

public abstract class RecurringLesson : Lesson
{
    public int DayOfWeek { get; set; }
    public DateTime StartDate { get; set; }
    public DateTime EndDate { get; set; }
    public string Frequency { get; set; }
}

public class PrivateLesson : RecurringLesson
{
    public string Student { get; set; }
    public string Teacher { get; set; }
    public virtual ICollection<Cancellation> Cancellations { get; set; }
}

public class Cancellation
{
    public Guid ID { get; set; }
    public DateTime Date { get; set; }
    public virtual PrivateLesson Lesson { get; set; }
    public virtual MakeUpLesson MakeUpLesson { get; set; }
}

public class MakeUpLesson : Lesson
{
    public DateTime Date { get; set; }
    public string Teacher { get; set; }
    public virtual Cancellation Cancellation { get; set; }
}

Конфигурация:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Lesson>().ToTable("Lessons");
    modelBuilder.Entity<RecurringLesson>().ToTable("RecurringLessons");
    modelBuilder.Entity<PrivateLesson>().ToTable("PrivateLessons");
    modelBuilder.Entity<MakeUpLesson>().ToTable("PrivateMakeUpLessons");

    modelBuilder.Entity<Cancellation>()
       .HasOptional(x => x.MakeUpLesson)
       .WithRequired(x => x.Cancellation);

    base.OnModelCreating(modelBuilder);
}

Примечания:

Это отлично работало в EF 4.2. Что-то не так с моей моделью? Фактическая модель намного сложнее, поэтому я абстрагировал все классы. Кроме того, я работаю с существующей базой данных, поэтому мне нужно использовать таблицу -Per -Тип наследования.

Если я изменю отношение Cancellationк PrivateMakeUpLessonс 1 на 0..1 на 0..1 на 0..1, это сработает. Это нежелательно, потому что у вас не может быть PrivateMakeUpLessonбез Cancellation.

Кроме того, если я заставлю PrivateMakeUpLessonНЕ наследовать от Lesson, тогда это также сработает, но это будет уроком, и он должен оставаться таковым для существующей бизнес-логики.

Буду признателен за любые указания. Спасибо!

Править:

Запуск награды. Я не могу найти никакой документации о том, что изменилось между EF 4.2 и EF 4.3 в отношении создания индекса для кода в первую очередь.Понятно, что EF 4.3 создает больше индексов и что схема именования изменилась, но я хочу знать, есть ли ошибка в EF или что-то принципиально неправильное в моей модели или конфигурации API Fluent.

10
задан Lucifer Sam 6 May 2012 в 02:50
поделиться