【发布时间】:2014-06-06 01:19:33
【问题描述】:
我有这个实体:
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”列中。 声明已终止。
你知道发生了什么吗?
【问题讨论】:
标签: c# entity-framework many-to-many entity-framework-6 self-reference