想知道我是否需要使用Genericrepository模式和UnitOfWork来模拟存储库。我正在使用MOQ.Is它现在是多余的,因为我注意到EF 4.1有IDBSet。
我还没弄明白如何编写一些通用的IDBSet。如果你有一个实例IDBSet的例子,你可以向我展示吗?
有什么建议吗?
答案 0 :(得分:29)
这是已经在SO上讨论的许多主题的重复,但我同意其中一些很难找到,因为它们嵌套在其他问题中
我希望这会给你一些答案。如果没有,请随时在此处或在新问题中询问更多信息。
答案 1 :(得分:0)
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; }
}
}
答案 2 :(得分:0)
此外,我想补充一点,关于实体框架的通用存储库和工作单元是多余的,请查看此链接http://rob.conery.io/2014/03/04/repositories-and-unitofwork-are-not-a-good-idea/