有没有办法可以简化从我的dbset中删除对象的EF6?

时间:2014-05-05 15:18:38

标签: asp.net asp.net-mvc entity-framework asp.net-web-api

我之前使用的代码存储库包含此代码:

    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的条目删除,而不必硬编码所有行来检查条目是否已经附加等等?

1 个答案:

答案 0 :(得分:1)

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