从集合中移除实体时移除实体
本文关键字:实体 集合 | 更新日期: 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);
}