Как я могу каскадно удалить в таблицу ссылок, используя свободный API EF4? - PullRequest
3 голосов
/ 11 ноября 2010

У меня есть две таблицы в существующей (MSSQL 2008 R2) базе данных, связанные таблицей ссылок.

Две таблицы - «План» и «Советы».Таблица ссылок - «PlanTipLinks».

Планы могут иметь много советов, и советы могут быть связаны с несколькими планами (т. Е. Это отношение «многие ко многим»).В приложении меня интересуют только отношения "Plan.Tips".Мне не нужны обратные отношения Tip.Plans.

Ссылки внешнего ключа в таблице ссылок не могут быть нулевыми.

Я использую следующий свободный код API для сопоставления этой связи:

modelBuilder.Entity<Plan>()
    .HasMany(p => p.Tips)
    .WithMany()
    .Map("PlanTipLinks", (p, t) =>
        new
        {
            PlanId = p.Id,
            TipId = t.Id
        });

Это создает правильные записи в таблице.Проблема в том, что когда я удаляю план, я получаю исключение внешнего ключа в таблице PlanTipLinks.

Предположительно, мне нужно указать каскадный переход в таблицу PlanTipLinks при удалении плана, но я неуверен, как это сделать.Кажется, я не могу вызвать метод WillCascadeOnDelete с помощью методов HasMany / WithMany.

Чего мне здесь не хватает?

1 Ответ

1 голос
/ 27 ноября 2010

Начиная с EF CTP4, нет способа напрямую включить каскадные удаления для ассоциаций "многие ко многим" с помощью Fluent API.

Тем не менее, если вы хотите убедиться, чтоВы можете удалить этот принцип (например, запись Plan ), не беспокоясь о зависимой записи в таблице ссылок (т.е. PlanTipLinks ), тогда вам не нужно включать каскадыбаза данных с EF Code First позаботится о каскадном удалении на стороне клиента, когда речь заходит о ассоциациях «многие ко многим».

Например, когда вы удаляете объект Plan , код сначала достаточно умен, чтобы сначала отправить инструкцию удаления, чтобы избавиться от зависимой записи в таблице PlanTipLinks и после этого он отправит еще один оператор удаления для удаления записи плана.

Для получения дополнительной информации, пожалуйста, взгляните на следующий пост:
EF CTP4 каскадное удаление для многих ко многим отношениям

...