Entity Framework Core Cascade Delete Ошибка - PullRequest
1 голос
/ 10 февраля 2020

Несмотря на то, что было установлено значение on-delete: «ReferentialAction.Restrict» для внешнего ключа «FK_TeamMember_Teams_TeamId», при попытке удалить запись из таблицы TeamMember выдается следующая ошибка. Не могли бы вы помочь мне с тем, как я должен избавиться от этой ошибки?

Microsoft.EntityFrameworkCore.DbUpdateException: An error occurred while updating the entries. 
See the inner exception for details.
---> Microsoft.Data.SqlClient.SqlException (0x80131904): The DELETE statement conflicted with the
REFERENCE constraint "FK_TeamMember_Teams_TeamId". The conflict occurred in database "mot", table 
"dbo.TeamMember", column 'TeamId'. The statement has been terminated.    

Ниже приведен блок кода миграции

  migrationBuilder.CreateTable(
            name: "TeamMember",
            columns: table => new
            {
                Id = table.Column<Guid>(nullable: false),
                MarketingOfficerId = table.Column<Guid>(nullable: false),
                TeamId = table.Column<Guid>(nullable: true)
            },
            constraints: table =>
            {
                table.PrimaryKey("PK_TeamMember", x => x.Id);
                table.ForeignKey(
                    name: "FK_TeamMember_Employees_MarketingOfficerId",
                    column: x => x.MarketingOfficerId,
                    principalTable: "Employees",
                    principalColumn: "Id",
                    onDelete: ReferentialAction.Cascade);
                table.ForeignKey(
                    name: "FK_TeamMember_Teams_TeamId",
                    column: x => x.TeamId,
                    principalTable: "Teams",
                    principalColumn: "Id",
                    onDelete: ReferentialAction.Restrict);
            });

Метод OnModelCreating Я также использовал следующее.

modelBuilder.Entity<Team>()
       .HasMany(i => i.TeamMembers)
       .WithOne(i=>i.Team)
       .OnDelete(DeleteBehavior.Restrict);

Спасибо

1 Ответ

0 голосов
/ 13 февраля 2020

Я думаю, что поведение правильное, так как, когда основная таблица удаляет запись, она должна удалить связанные записи в подробной таблице. Нет смысла хранить это. Данные будут избыточными. Но в случае, если мы хотим создать такой сценарий, хотя мы установили для CascadeDelete значение Restrict в файле миграции.cs, он не будет работать должным образом. Следующая статья поможет понять поведение.

https://docs.microsoft.com/en-us/ef/core/saving/cascade-delete

...