我有这个实体:
public class Course {
public Course(){
Postrequisites = new List<Course>();
Prerequisites = new List<Course>();
}
public long Id { get; set; }
public byte[] RowVersion { get; set; }
// some other properties...
public IList<Course> Postrequisites { get; set; }
public IList<Course> Prerequisites { get; set; }
}
具有多对多的自引用关系。这是我的配置:
public class CourseConfiguration : EntityTypeConfiguration<Course> {
public CourseConfiguration() {
// configurations for other properties...
HasMany(t => t.Postrequisites)
.WithMany(t => t.Prerequisites)
.Map(t => {
t.ToTable("CourseRequisites");
t.MapLeftKey("PostrequisiteId");
t.MapRightKey("PrerequisiteId");
});
}
}
当我尝试使用此方法删除项目时(请参阅方法Handle
):
public class DeleteCommandHandlerBase {
private readonly EntityContext _context;
public DeleteCommandHandlerBase(EntityContext context) {
_context = context;
}
protected virtual void Handle<TEntity>(long entityId) where TEntity : EntityBase, new() {
var entity = _context.Set<TEntity>().Find(entityId);
if (entity == null)
throw new Exception(TextResources.ItemToDeleteNotFound);
_context.Delete(entity); // see comment #1
_context.SaveChanges();
}
}
// comment #1
// _context.Delete is a custom method on my context which is:
public void Delete<TEntity>(TEntity entity) where TEntity : class {
DbSet<TEntity> set = Set<TEntity>();
if (Entry(entity).State == EntityState.Detached)
set.Attach(entity);
set.Remove(entity);
}
,我收到此错误:
更新条目时发生错误。有关详细信息,请参阅内部异常。
内在的例外是:
更新条目时发生错误。有关详细信息,请参阅内部异常。
内在的例外是:
DELETE语句与REFERENCE约束“FK_dbo.CourseRequisites_dbo.Courses_PostrequisiteId”冲突。冲突发生在数据库“MyDb”,表“dbo.CourseRequisites”,列'PostrequisiteId'中。 声明已经终止。
你知道发生了什么吗?
答案 0 :(得分:0)
我遇到了同样的错误。 找到了这个CASCADE Delete in many-to-many self-reference table
不幸的是,这不是解决方案。从本质上讲,这是一个数据库问题。首先需要删除关系条目,然后才能删除实体本身。
但由于我们都使用了Fluent API,我们无法访问关系表,至少我不知道如何。