C# 一对多级联删除多对多原因异常

C# 一对多级联删除多对多原因异常,c#,entity-framework-4,ef-code-first,C#,Entity Framework 4,Ef Code First,我的代码运行良好,直到我添加了WillCascadeOnDelete(true) 异常:InvalidOperationException-数据库创建成功,但数据库对象的创建没有成功。有关详细信息,请参阅内部异常 内部异常:System.Data.SqlServerCe.SqlCeException-引用关系将导致不允许的循环引用。[约束名称=用户\管理员\目标] 最小复制(在新的MVC3 Web应用程序项目中): 使用System.Collections.Generic; 使用System.C

我的代码运行良好,直到我添加了WillCascadeOnDelete(true)

异常:InvalidOperationException-数据库创建成功,但数据库对象的创建没有成功。有关详细信息,请参阅内部异常

内部异常:System.Data.SqlServerCe.SqlCeException-引用关系将导致不允许的循环引用。[约束名称=用户\管理员\目标]

最小复制(在新的MVC3 Web应用程序项目中):

使用System.Collections.Generic;
使用System.ComponentModel.DataAnnotations;
使用System.Data.Entity;
公共类用户
{
[关键]
公共字符串用户名{get;set;}
公共虚拟ICollection文档{get;set;}
{get;set;}的公共虚拟ICollection管理员
}
公共类文档
{
公共int Id{get;set;}
公共用户所有者{get;set;}
公共ICollection管理员{get;set;}
}
公共类EntityMappingContext:DbContext
{
公共数据库集用户{get;set;}
公共数据库集文档{get;set;}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Entity()
.HasMany(x=>x.AdministratorOf)
.WithMany(x=>x.Administrators)
.Map(x=>
{
x、 MapLeftKey(“用户名”);
x、 MapRightKey(“文件”);
x、 ToTable(“文件管理员”);
});
modelBuilder.Entity()
.has必需(x=>x.Owner)
.WithMany(x=>x.Documents)
.WillCascadeOnDelete(真);
基于模型创建(modelBuilder);
}
}
当然,还必须将SQL连接字符串添加到ConnectionString下的web.config中:

<add name="EntityMappingContext" connectionString="Data Source=|DataDirectory|Error.sdf" providerName="System.Data.SqlServerCe.4.0"/>


当一对多关系已经存在时,启用“删除时级联”如何创建循环关系?是不是说级联删除中有一个循环?当我指定的唯一级联是User->Document时,是如何实现的?我怎么修理它?谢谢

级联删除错误不一定是由于循环关系,而是由于在删除树中对同一个表有多个引用,请参见

触发器为删除:

  • 用户->文档->文档管理员
  • 用户->文档管理员
通过删除一个用户,它会触发两次多对多表的删除,从而导致错误。在业务逻辑中删除属于所有者的所有文档可能更好

<add name="EntityMappingContext" connectionString="Data Source=|DataDirectory|Error.sdf" providerName="System.Data.SqlServerCe.4.0"/>