我一直试图弄清楚为什么我的数据库中的列被设置为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();
答案 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);
}