【问题标题】:Is there a way I can simplify removal of an object from my dbset with EF6?有没有一种方法可以简化使用 EF6 从我的 dbset 中删除对象的过程?
【发布时间】:2014-05-05 15:18: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);
        }
    }

我的应用程序很简单,我注意到很多人说“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 简化条目的删除,而无需对所有行进行硬编码以检查条目是否已附加等?

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-08-15
      • 2023-04-03
      • 1970-01-01
      • 2010-12-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多