从集合中删除时删除实体

时间:2015-10-08 14:59:52

标签: c# sql entity-framework-6

我一直试图弄清楚为什么我的数据库中的列被设置为null。我将其追溯到entityframework,当你从集合中删除一个项目时,它没有从数据库中删除,只是将关系列设置为null。我找到了一个下面的解决方案,但似乎还有其他解决方案。

由于

modelBuilder.Entity<ClassAttendance>().HasKey( x => new
            {
                x.Id,
                x.ClassDefinitionId
            } );
modelBuilder.Entity<ClassAttendance>().Property( x => x.Id ).HasDatabaseGeneratedOption( DatabaseGeneratedOption.Identity );
modelBuilder.Entity<ClassDefinition>().HasMany( x => x.Attendances ).WithRequired().HasForeignKey( c => c.ClassDefinitionId ).WillCascadeOnDelete();

1 个答案:

答案 0 :(得分:1)

我认为如果它有效,你上面的方法就没问题。您可能会考虑的另一个选项是标记要删除的对象:

context.Entry(entity).State = EntityState.Deleted;

这将确保在您将更改提交到数据库时从数据库中删除记录。

修改
您需要稍微调整一下逻辑以适应您的实现,但您也可以查看滚动自己的扩展方法,以便在更改跟踪器中标记要删除的实体:

public static void Delete<TEntity> Delete<TEntity>(this IRepository repository, Func<IRepository, TEntity> selector)
{
    repository.MarkEntityState(selector(repository), EntityState.Deleted);
}