Код первой ошибки ограничения «многие ко многим»

У меня есть следующее беглое отображение:

 modelBuilder.Entity<User>()
                .HasMany<Device>(user => user.Devices)
                .WithMany(sv => sv.Users)
                .Map(userDevice =>
                {
                    userDevice.MapLeftKey("UserId");
                    userDevice.MapRightKey("DeviceId");
                    userDevice.ToTable("UserDevice"));
                });

Внутренний пользователь:

public virtual ICollection<Device> Devices { get; set; }

Внутреннее устройство:

public virtual ICollection<User> Users { get; set; }

Теперь я получаю следующую ошибку:

{"Введение ограничения FOREIGN KEY 'FK_dbo.UserDevice_dbo.Device_DeviceId' в таблице 'UserDevice' может вызвать циклы или множественные каскадные пути. Укажите ON DELETE NO ACTION или ON UPDATE NO ACTION или измените другие ограничения FOREIGN KEY.\r\nНе удалось создать ограничение. См. предыдущие ошибки."}

Я бы хотел установить «WillCascadeOnDelete(false)», но эта опция недоступна для «WithMany()».

Я также нашел следующее решение, но я не хочу полностью отключать каскадное удаление: Проблема каскадного удаления Entity Framework «многие ко многим»


person Ole Albers    schedule 18.05.2015    source источник
comment
Я думаю, что ваше ограничение немного не так. Вы получаете ту же ошибку, если используете HasMany() вместо HasMany<Device>()?   -  person Claies    schedule 18.05.2015
comment
проблема в Map. WillCascadeOnDelete должен быть в порядке после WithMany. Вам действительно нужно установить таблицу и ключи для таблицы ссылок?   -  person tschmit007    schedule 18.05.2015
comment
@OleAlbers Не могли бы вы опубликовать код для моделей? Я подозреваю, что есть еще одна противоречивая связь.   -  person user2697817    schedule 18.05.2015