UnitOfWork和GenericRepository模式是否冗余在EF 4.1代码中?
想知道是否需要使用Genericrepository模式和UnitOfWork模拟知识库。我正在使用MOQ.Is现在是多余的,因为我已经注意到,EF 4.1有IDBSet。
我还没有想出如何写通用的IDBSet通用。如果你有一个例子,你实现IDBSet你可以显示给我?
有什么build议么?
这是已经讨论过的许多话题的重复,但我同意,其中一些可能很难find,因为它们嵌套在其他问题
- EF 4.1中的通用存储库有什么意义?
- EF中可testing和可嘲讽代码的挑战
- 关于嘲笑EF代码的另一个问题
- 实现自定义IDbSet
- 另一个问题导致关于存储库和工作单元的讨论
我希望这会给你一些答案。 如果没有,请不要犹豫,在这里或在一个新的问题要求更多的信息。
public class MockDbSet<T> : IDbSet<T> where T : class, new() { private List<T> _entities; public MockDbSet(List<T> entities) { _entities = entities; } public virtual T Add(T entity) { _entities.Add(entity); return entity; } public virtual T Attach(T entity) { _entities.Add(entity); return entity; } public TDerivedEntity Create<TDerivedEntity>() where TDerivedEntity : class, T { return new T() as TDerivedEntity; } public virtual T Create() { return new T(); } public virtual T Find(params object[] keyValues) { throw new NotImplementedException(); } public System.Collections.ObjectModel.ObservableCollection<T> Local { get { return new ObservableCollection<T>(_entities); } } public virtual T Remove(T entity) { _entities.Remove(entity); return entity; } public IEnumerator<T> GetEnumerator() { return _entities.GetEnumerator(); } System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() { return _entities.GetEnumerator(); } public Type ElementType { get { return _entities.AsQueryable().ElementType; } } public System.Linq.Expressions.Expression Expression { get { return _entities.AsQueryable().Expression; } } public IQueryProvider Provider { get { return _entities.AsQueryable().Provider; } } }
另外我想补充一点,entity framework上的通用存储库和工作单元是多余的,看看这个链接http://rob.conery.io/2014/03/04/repositories-and-unitofwork-are-not-一个好主意/