エラー:
未処理の例外: System.Data.SqlClient.SqlException: テーブル 'PrivateMakeUpLessons' に名前 '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 で正常に機能しました。私のモデルに何か問題がありますか? 実際のモデルはもっと複雑なので、すべてのクラスを抽象化しています。また、既存のデータベースに対して作業しているため、Table-Per-Type 継承を使用する必要があります。
の関係を 1 から 0..1 から 0..1 から 0..1 に変更すると、Cancellation
機能PrivateMakeUpLesson
します。PrivateMakeUpLesson
なしでは を持てないため、これは望ましくありませんCancellation
。
また、PrivateMakeUpLesson
継承しないようにLesson
しても機能しますが、これは教訓であり、既存のビジネス ロジックについてはそのままにしておく必要があります。
ガイダンスをいただければ幸いです。ありがとうございました!
編集:
バウンティを開始します。最初のコードのインデックス生成に関して、EF 4.2 と EF 4.3 の間で何が変更されたかについてのドキュメントが見つかりません。EF 4.3 がより多くのインデックスを作成し、命名スキームが変更されたことは明らかですが、EF にバグがあるかどうか、またはモデルまたは流暢な API 構成に根本的な問題があるかどうかを知りたいです。