Отношение один ко многим - каскадное удаление - PullRequest
0 голосов
/ 14 июня 2011

Я использую EF 4.1, где пытаюсь сопоставить свою POCO с моей существующей базой данных. Это работает нормально, пока я не попытаюсь удалить элемент, от которого зависит другой элемент. Я хочу включить каскадное удаление, чтобы при удалении моего первого элемента все зависимости также были удалены (я думаю, это называется каскадным удалением).

Я попытался включить это в OnModelCreating:

modelBuilder.Entity<Component>()
         .HasMany(c => c.Specifications)
         .WithRequired(s => s.Component)
         .Map(m => m.MapKey("ComponentId"))
         .WillCascadeOnDelete(true);

Однако я все еще получаю исключение The DELETE statement conflicted with the REFERENCE constraint.

База данных довольно проста:

Компонент

ComponentId (PK)
Description

Спецификация

SpecificationID (PK)
Description
ComponentID (FK)

Я создал два следующих класса для соответствия этой настройке:

public class Specification
{
    [Key]
    [Required]
    public int Id { get; set; }

    [MaxLength(50)]
    [Required]
    public string Description { get; set; }

    public virtual Component Component { get; set; }
}

и

public class Component
{
    [Key]
    [Required]
    public int Id { get; set; }

    [MaxLength(50)]
    [Required]
    public string Description { get; set; }

    public virtual ICollection<Specification> Specifications { get; set; }
}

1 Ответ

2 голосов
/ 14 июня 2011

Каскадное удаление в вашей модели требует каскадное удаление в вашей БД.Если вы позволите EF воссоздать для вас БД, он установит это автоматически.Если вы не можете позволить EF сделать это, то вы должны либо:

  1. добавить каскадное удаление в FK вручную, либо
  2. удалить каскад из модели.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...