从集合中移除实体时移除实体

本文关键字:实体 集合 | 更新日期: 2023-09-27 18:16:43

我一直在试图弄清楚为什么我的数据库中的一列被设置为空。我跟踪到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();

从集合中移除实体时移除实体

我认为你上面的方法很好,如果它有效的话。您可以考虑的另一个选项是标记要删除的对象:

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);
}