Ошибка:
Необработанное исключение :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.