【发布时间】:2015-04-04 16:30:38
【问题描述】:
public virtual void Delete(T entity)
{
DbEntityEntry dbEntityEntry = DbContext.Entry(entity);
if (dbEntityEntry.State != EntityState.Deleted)
{
dbEntityEntry.State = EntityState.Deleted;
}
else
{
DbSet.Attach(entity);
DbSet.Remove(entity);
}
}
当然这个方法和这个是一样的:
public virtual void Delete(T entity)
{
DbEntityEntry dbEntityEntry = DbContext.Entry(entity);
if (dbEntityEntry.State == EntityState.Deleted)
{
DbSet.Attach(entity);
DbSet.Remove(entity); // Why to remove here??
}
else
{
// And why to set as Deleted here??
dbEntityEntry.State = EntityState.Deleted;
}
}
我在this 文章中看到了上面的代码。恕我直言,此代码的某些部分是多余的。 if 语句 的目的是什么? else statement的目的是什么?
正如我所测试的,DbSet.Remove(entity); 和dbEntityEntry.State = EntityState.Deleted 之间的区别在于,所有引用的行也在第一个代码中被删除,但在第二个代码中,EF 将抛出对该行具有 FK 的行的异常。
【问题讨论】:
标签: c# .net entity-framework