C# 实体框架中的级联删除

C# 实体框架中的级联删除,c#,sql,entity-framework,entity-framework-6,C#,Sql,Entity Framework,Entity Framework 6,我在实体框架6中设置关系和使级联删除工作时遇到问题 我有以下对象 public class Module { public long Id { get; set; }; public virtual ICollection<Group> Groups { get; set; }; } public class Group { public long Id { get; set; }; public virtual ICollection<Fie

我在实体框架6中设置关系和使级联删除工作时遇到问题

我有以下对象

public class Module {
    public long Id { get; set; };
    public virtual ICollection<Group> Groups { get; set; };
}

public class Group {
    public long Id { get; set; };
    public virtual ICollection<Field> Fields { get; set; };
}

public class Field {
    public long Id { get; set; };
    public virtual FieldLink Link { get; set; };
}

public class FieldLink {
    public long Id { get; set; };
    public virtual Module LinkToModule { get; set; };
}
现在我正在运行我的测试,我得到以下错误

Test method ModuleServiceTests.ModuleService_DeleteAsync_ByEntity threw exception: 

System.Data.SqlClient.SqlException: The DELETE statement conflicted with the REFERENCE constraint "FK_dbo.FieldLink_dbo.Field_Id". The conflict occurred in database "TestDb", table "dbo.FieldLink", column 'Id'.
如果我检查关系,它是在table Field.Id>FieldLink.Id之间,并且删除规则设置为NO ACTION。很好,所以我想我需要更新这种关系并使用willcascade

所以我更新了FieldConfig中的代码

this.HasOptional(e => e.Link)
    .WithRequired(e => e.Field);

但是现在当我尝试运行我的测试时,数据库甚至没有被创建,我得到的错误是

Initialization method Test.TestInitialize threw exception. 
System.Data.SqlClient.SqlException: Introducing FOREIGN KEY constraint 'FK_dbo.FieldLink_dbo.Field_Id' on table 'FieldLink' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.

有人能帮忙吗?我是否设置了错误的关系,是否走错了方向?

MS SQL Server不支持级联删除操作中的循环。您只需要选择两个方向中的一个来级联删除,或者找到一个解决方法,如本例中的触发器所在。这也包含一些见解。

因此,如果有人删除模块,我必须手动编写代码,首先删除指向该模块的所有FieldLink,然后删除该模块,让sql级联其余部分?您可以选择一个方向进行级联删除,也可以使用INSTEAD OF触发器手动解决,在代码中等等。。我为答案添加了一些链接。
this.HasOptional(e => e.Link)
    .WithRequired(e => e.Field)
    .WillCascadeOnDelete(true);
Initialization method Test.TestInitialize threw exception. 
System.Data.SqlClient.SqlException: Introducing FOREIGN KEY constraint 'FK_dbo.FieldLink_dbo.Field_Id' on table 'FieldLink' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.