EF-Core — каскадное удаление — оператор DELETE конфликтует с ограничением REFERENCEC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 EF-Core — каскадное удаление — оператор DELETE конфликтует с ограничением REFERENCE

Сообщение Anonymous »

При удалении UserGroup выдается следующее исключение.

SqlException: оператор DELETE конфликтует с ограничением REFERENCE
"FK_SecurityAssignments_UserGroups_UserGroupId". Конфликт
произошел в базе данных «AppDb», таблица
«dbo.SecurityAssignments», столбец «UserGroupId». Утверждение
было прекращено.

Я следовал подходу из этого поста, но, очевидно, что-то упустил ;-)
Каскадное удаление с помощью EF Core
Модели:

Код: Выделить всё

public class UserGroup
{
public int Id { get; set; }
public virtual ICollection SecurityAssignments { get; set; } = new List();
}

public class Role
{
public int Id { get; set; }
public virtual ICollection SecurityAssignments { get; set; } = new List();
}

public class SecurityAssignment
{
public int Id { get; set; }

public int UserGroupId { get; set; }
public virtual UserGroup UserGroup { get; set; }

public int RoleId { get; set; }
public virtual Role Role { get; set; }
}
Настройка в OnModelCreating

Код: Выделить всё

protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);

// Remove cascade delete unless explicit set below

var cascadeFKs = builder.Model
.GetEntityTypes()
.SelectMany(t => t.GetForeignKeys())
.Where(fk => !fk.IsOwnership && fk.DeleteBehavior == DeleteBehavior.Cascade);

foreach (var fk in cascadeFKs)
{
fk.DeleteBehavior = DeleteBehavior.Restrict;
}

// explicit set cascade delete
// Remove security assignments when group deleted
builder.Entity().HasMany(x => x.SecurityAssignments).WithOne(x => x.UserGroup).HasForeignKey(x => x.UserGroupId).OnDelete(DeleteBehavior.Cascade);
}
Есть предложения?

Подробнее здесь: https://stackoverflow.com/questions/659 ... ference-co
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»