Asp.net 实体框架核心级联删除错误
虽然它已设置为on delete(在删除时):在外键“FK_TeamMember_TeamId”上设置为“ReferentialAction.Restrict”,但在尝试从TeamMember表中删除记录时会出现以下错误。你能帮我解决这个错误吗Asp.net 实体框架核心级联删除错误,asp.net,entity-framework,entity-framework-core,asp.net-core-webapi,webapi,Asp.net,Entity Framework,Entity Framework Core,Asp.net Core Webapi,Webapi,虽然它已设置为on delete(在删除时):在外键“FK_TeamMember_TeamId”上设置为“ReferentialAction.Restrict”,但在尝试从TeamMember表中删除记录时会出现以下错误。你能帮我解决这个错误吗 Microsoft.EntityFrameworkCore.DbUpdateException: An error occurred while updating the entries. See the inner exception for det
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);
});
migrationBuilder.CreateTable(
名称:“团队成员”,
列:表=>new
{
Id=table.Column(可空:false),
MarketingOfficeId=table.Column(可空:false),
TeamId=table.Column(可空:true)
},
约束:表=>
{
表.PrimaryKey(“PK_团队成员”,x=>x.Id);
表1.外键(
名称:“FK\U团队成员\U员工\U营销办公室”,
列:x=>x.MarketingOfficeId,
原则性:“员工”,
主栏:“Id”,
onDelete:引用。级联);
表1.外键(
名称:“FK\U团队成员\U团队\U团队ID”,
列:x=>x.TeamId,
原则:“团队”,
主栏:“Id”,
onDelete:referentialiction.Restrict);
});
关于模型创建方法,我也使用了以下方法
modelBuilder.Entity<Team>()
.HasMany(i => i.TeamMembers)
.WithOne(i=>i.Team)
.OnDelete(DeleteBehavior.Restrict);
modelBuilder.Entity()
.HasMany(i=>i.TeamMembers)
.WithOne(i=>i.Team)
.OnDelete(DeleteBehavior.Restrict);
谢谢我认为这种行为是正确的,因为当主表删除记录时,它应该删除细节表中的相关记录。保留它没有意义。数据将是冗余的。但是,如果我们想创建这样的场景,尽管我们在migration.cs中将CascadeDelete设置为Restrict,但它将无法按预期工作。下面的文章将有助于理解这些行为
我认为这种行为是正确的,因为当主表删除记录时,它应该删除细节表中的相关记录。保留它没有意义。数据将是冗余的。但是,如果我们想创建这样的场景,尽管我们在migration.cs中将CascadeDelete设置为Restrict,但它将无法按预期工作。下面的文章将有助于理解这些行为
您使用的是什么版本的EF Core?Entity Framework Core v3.1.1您使用的是什么版本的EF Core?Entity Framework Core v3.1.1