[英]Cascade delete in entity framework
我在实体框架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; };
}
现在,一个模块具有组,一个组具有字段,一个字段可以具有链接。 链接将具有LinkToModule,但这可以是与父字段/组所属的模块不同的模块。
我已经建立了这样的关系
public ModuleConfig()
{
this.ToTable("Module");
}
public FieldGroupConfig()
{
this.ToTable("FieldGroup");
// relationships
this.HasRequired(e => e.Module)
.WithMany(e => e.Groups)
.HasForeignKey(e => e.ModuleId);
}
public FieldConfig()
{
this.ToTable("Field");
this.HasRequired(e => e.FieldGroup)
.WithMany(e => e.Fields)
.HasForeignKey(e => e.FieldGroupId);
this.HasOptional(e => e.Link)
.WithRequired(e => e.Field);
}
public FieldLinkConfig()
{
this.ToTable("FieldLink");
this.HasRequired(e => e.LinkToModule)
.WithMany()
.HasForeignKey(e => e.LinkToModuleId);
}
现在我正在运行测试,并且出现以下错误
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'.
对于如果我检查的关系,它是在表Field.Id> FieldLink.Id之间,并且DELETE规则设置为NO ACTION。 很好,所以我想我需要更新这种关系并使用WillCascadeOnDelete(true)
所以我从更新了FieldConfig中的代码
this.HasOptional(e => e.Link)
.WithRequired(e => e.Field);
至
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.
有人可以帮忙吗? 我是否建立了不正确的关系,这是我走错了路吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.