C# 一对一对多导致循环或多个级联路径错误

C# 一对一对多导致循环或多个级联路径错误,c#,.net,sql-server,entity-framework-core,C#,.net,Sql Server,Entity Framework Core,在开发过程中,我将Entity Framework Core 3.1.0与SQL Server Express一起使用 我有一对一的关系和一对多的关系,就像这样: Relation --> SupplierSettings --< Conditions 我将我的上下文配置为: Relation --> SupplierSettings --< Conditions //一对一,其中关系为主体,供应商导入设置为从属关系。 modelBuilder.Entity() .H

在开发过程中,我将Entity Framework Core 3.1.0与SQL Server Express一起使用

我有一对一的关系和一对多的关系,就像这样:

Relation --> SupplierSettings --< Conditions
我将我的上下文配置为:

Relation --> SupplierSettings --< Conditions
//一对一,其中关系为主体,供应商导入设置为从属关系。
modelBuilder.Entity()
.HasOne()
.WithOne(sis=>sis.供应商)
.HasForeignKey(sis=>sis.SupplierId)
.OnDelete(DeleteBehavior.Cascade);
//一对多,以供应商导入设置为主体,供应商条件为从属。
modelBuilder.Entity()
.HasMany(sis=>sis.Conditions)
.WithOne(c=>c.供应商导入设置)
.HasForeignKey(c=>c.SupplierImportSettingId)
.OnDelete(DeleteBehavior.Cascade);
但我得到了这个错误:

执行DbCommand失败(11ms)[参数=[],命令类型='Text',命令超时='30']

ALTER TABLE[SupplierConditions]添加约束[FK\U SupplierConditions\U SupplierImportSettings\U SupplierImportSettings]外键([SupplierImportSettings])在删除级联上引用[SupplierImportSettings]([Id])

Microsoft.Data.SqlClient.SqlException(0x80131904):在表“SupplierConditions”上引入外键约束“FK\U SupplierConditions\U SupplierImportSettings\U SupplierImportSettings ID”可能会导致循环或多个级联路径。指定“在删除时不执行操作”或“在更新时不执行操作”,或修改其他外键约束。 无法创建约束或索引。请参阅前面的错误

在E:\agent1\\u work\34\s\src\Microsoft.Data.SqlClient\netcore\src\Microsoft\Data\Data\SqlClient\SqlConnection.OnError(SqlException异常,布尔断开连接,Action
1 wrapCloseInAction)中的
在E:\agent1\u work\34\s\src\Microsoft.Data.SqlClient\netcore\src\Microsoft\Data\Data\SqlClient\SqlInternalConnection.cs中的Microsoft.Data.SqlClient.SqlInternalConnection.OnError(SqlException异常、布尔断开连接、Action
1 wrapCloseInAction)处 在E:\agent1\u work\34\s\src\Microsoft.Data.SqlClient\netcore\src\Microsoft\Data\SqlClient\SqlClient\TdsParser.cs第1169行中的Microsoft.Data.SqlClient.TdsParser.throweexception和warning(TdsParserStateObject stateObj,布尔调用连接锁,布尔异步关闭)处 在E:\agent1\u work\34\s\src\Microsoft.Data.SqlClient.TdsParser.TryRun(运行行为运行行为,SqlCommand cmdHandler,SqlDataReader数据流,bulkCopySimpleResult集bulkCopyHandler,TdsParserStateObject stateObjectStateObjects,Boolean&dataReady)中的E:\agent1\u work\34\s\src\Microsoft.Data.SqlClient\netcore\src\Microsoft\Data\SqlClient\TdsParser.cs:第1719行
在E:\agent1\u work\34\s\src\Microsoft.Data.SqlClient\netcore\src\Microsoft\Data.sql\Data\SqlClient\SqlCommand.runexecutenonqueryds(字符串方法名,布尔值isAsync,Int32超时,布尔值asyncWrite)中的Microsoft.Data.SqlClient\netcore\src\Microsoft\Data\SqlClient\SqlCommand.cs:第2857行
在E:\agent1\\ u work\34\s\src\Microsoft.Data.SqlClient.InternalExecuteNonQuery(TaskCompletionSource
1 completion,Boolean sendToPipe,Int32 timeout,Boolean&usedCache,Boolean asyncWrite,Boolean inrry,String methodName)中的E:\agent1\\ u work\34\s\src\Microsoft.Data.SqlClient\netcore\src\Microsoft\Data\SqlClient\SqlCommand.cs:1395行
在E:\agent1\\u work\34\s\src\Microsoft.Data.SqlClient\netcore\src\Microsoft\Data\Data\SqlClient\SqlCommand.cs中的Microsoft.Data.SqlClient.SqlCommand.ExecuteNonQuery()处:第974行
位于Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteOnQuery(RelationalCommandParameterObject parameterObject)
在Microsoft.EntityFrameworkCore.Migrations.MigrationCommand.ExecuteOnQuery(IRelationalConnection连接,iRelationalDYDictionary
2参数值)
位于Microsoft.EntityFrameworkCore.Migrations.Internal.MigrationCommandExecutor.ExecutionQuery(IEnumerable`1 migrationCommands,IRelationalConnection连接)
位于Microsoft.EntityFrameworkCore.Migrations.Internal.Migrator.Migrate(字符串targetMigration)
位于Microsoft.EntityFrameworkCore.Design.Internal.MigrationsOperations.UpdateDatabase(String targetMigration,String contextType)
在Microsoft.EntityFrameworkCore.Design.OperationExecutor.UpdateDatabaseImpl(字符串targetMigration,字符串contextType)
在Microsoft.EntityFrameworkCore.Design.OperationExecutor.UpdateDatabase.c__DisplayClass0_0.b__0()
位于Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(操作)

客户连接ID:3563e9af-ca34-45dc-a3aa-76394f5cfcbd
错误编号:1785,状态:0,类别:16
在表“SupplierConditions”上引入外键约束“FK\U SupplierConditions\U SupplierImportSettings\U SupplierImportSettings ID”可能会导致循环或多个级联路径。指定“在删除时不执行操作”或“在更新时不执行操作”,或修改其他外键约束。 无法创建约束或索引。请参阅前面的错误

实际上,SQL Server可能是正确的,因为当我删除
关系
实体时,这将导致级联删除。但这正是我想要的<代码>关系是主体,因此应删除其他记录

所以我想,也许我也需要定义一对一关系的另一种方式。当我将其添加到我的上下文配置中时,迁移运行并执行时不会出错。但是当我检查数据库时,在SupplierImportSettings上创建的约束在DELETE上没有。因此,当我删除关系实体时,SupplierImportSettings将不会被删除。那不是我想要的

//SupplierImportSetting为主体,关系为从属关系。
//以另一种方式定义一对一以禁用此方向的级联删除。
modelBuilder.Entity()
.HasOne(sis=>sis.Supplier)
.WithOne()
.OnDelete(DeleteBehavior.NoAction);

无论我尝试什么,我都无法让实体框架核心创建我想要的情况。

我明白你的想法