基于EF模型的存储库是否应首先包含Update方法?

时间:2012-08-09 20:39:38

标签: entity-framework repository-pattern

我一直在使用存储库模式,首先设置实体框架模型。在我的基础存储库类中,我有典型的CRUD方法。由于EF跟踪对象的更改,为什么我需要更新CRUD方法?我可以简单地查询存储库对对象进行更改并在不调用Update的情况下提交。 EF将自动更新使用Modified对象状态更改的任何对象。感谢

public class BaseRepository<T> : IRepository<T> where T : class
{
  private ObjectSet<T> _set;
  private readonly IDatabaseFactor _databaseFactory;

  protected MyDataContext DataContext
  {
    get{ return _databaseFactory.DataContext;}
  }


  public BaseRepository(IDatabaseFactory dbFactory)
  {
    _databaseFactory = dbFactory;
        _set = _databaseFactory.DataContext.CreateOjbectSet<T>();
  }

  public virtual IQueryable<T> GetQuery()
  {
    return _set;
  }

  public virtual void Insert(T entity)
  {
    _set.AddObject(entity);
  }

  public virtual void Delete(T entity)
  {
    _set.DeleteObject(entity);
  }

  public virtual void Update(T entity)
  {
    _context.ObjectStateManager.ChangeObjectState(entity, EntityState.Modified);
  }
}

1 个答案:

答案 0 :(得分:0)

存储库应该是抽象的实现。这意味着您可以在界面下面进行任何实现。实现这种分离的关键在于使您可以完全重写BaseRepository而无需更改任何使用它的代码(因为使用它的代码应该基于IRepository

一个例子是实体框架与WCF数据服务。它们都使用EF和LINQ,但WCF数据服务需要在数据上下文上调用Update方法来构建提交数据的URL。