我一直在使用存储库模式,首先设置实体框架模型。在我的基础存储库类中,我有典型的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);
}
}
答案 0 :(得分:0)
存储库应该是抽象的实现。这意味着您可以在界面下面进行任何实现。实现这种分离的关键在于使您可以完全重写BaseRepository而无需更改任何使用它的代码(因为使用它的代码应该基于IRepository
一个例子是实体框架与WCF数据服务。它们都使用EF和LINQ,但WCF数据服务需要在数据上下文上调用Update方法来构建提交数据的URL。