是否有一种方法,我可以简化从我的dbset与EF6对象的删除



我以前使用的存储库是这样的代码:

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

我的应用程序很简单,我注意到很多人说"EF已经是一个存储库,所以你不需要使用另一个"。问题是,如果没有外部存储库包装,我现在发现,当我想编写一个简单的删除代码时,我发现有必要这样做:

    DbEntityEntry dbEntityEntry1 = db.Entry(objectiveDetail);
    if (dbEntityEntry1.State != EntityState.Deleted)
    {
        dbEntityEntry1.State = EntityState.Deleted;
    }
    else
    {
        db.ObjectiveDetails.Attach(objectiveDetail);
        db.ObjectiveDetails.Remove(objectiveDetail);
    }

我的一行repo.delete现在已经变成了十行。是否有一种方法可以让我回到简化删除条目与EF,而不必硬编码所有的行来检查条目是否已经附加等?

实际上,尽管EF本身就是一个存储库,但从关注点分离的角度来看,在许多情况下将EF抽象出来并使用存储库模式来实现这一点仍然是有意义的。我在EF中经常使用存储库模式。如果您正在使用自动化单元测试,那么存储库模式可以更容易地隔离您的代码以进行测试。

最新更新