0

我一直在使用存储库模式和实体框架模型的首次设置。在我的基础存储库类中,我有典型的 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);
  }
}
4

1 回答 1

0

存储库应该从它的实现中抽象出来。这意味着您可以在每个接口下有任何实现。进行这种分离的全部意义在于使您可以完全重写 BaseRepository 而无需更改任何使用它的代码(因为使用它的代码应该基于 IRepository

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

于 2012-08-10T01:47:22.403 回答