Каскадное удаление внешнего ключа в Code First

Я не могу заставить каскадное удаление работать правильно. Это моя таблица внешних ключей:

public class CoverageLevel
{
    public int Id { get; set; }
    public virtual MedicalPlan MedicalPlan { get; set; }  //foreign key
    public virtual VisionPlan VisionPlan { get; set; }    //foreign key
    public virtual DentalPlan DentalPlan { get; set; }    //foreign key
}

Есть три разных способа, которые я пробовал. Когда я не использую свободный API, он соответствующим образом настраивает таблицы и внешние ключи, но каскадное удаление не работает. Когда я использую этот код:

modelBuilder.Entity<MedicalPlan>().HasMany(t => t.CoverageLevels).WithOptional.WillCascadeOnDelete();

он создает второй столбец, поэтому у меня есть полностью нулевой MedicalPlan_Id, а затем MedicalPlan_Id1, который он заполняет. Когда я использую это:

modelBuilder.Entity<MedicalPlan>().HasMany(t => t.CoverageLevels).WithOptional().HasForeignKey(d => d.MedicalPlan).WillCascadeOnDelete();

Я получаю сообщение об ошибке при создании базы данных. Как правильно настроить каскадное удаление?


person proseidon    schedule 30.07.2012    source источник


Ответы (1)


modelBuilder.Entity<MedicalPlan>()
    .HasMany(m => m.CoverageLevels)
    .WithOptional(c => c.MedicalPlan)
    .WillCascadeOnDelete();

... должно быть правильное сопоставление. Если вы опускаете лямбда-выражение в Withoptional(...), EF предполагает, что MedicalPlan.CoverageLevels не имеет свойства обратной навигации в объекте CoverageLevel и что CoverageLevel.MedicalPlan принадлежит другому отношению, которое является причиной второго внешнего ключа.

person Slauma    schedule 30.07.2012