相关疑难解决方法(0)

具有实体框架的工作单元和通用存储库5

我正在使用ASP.NET MVC 4和Entity Framework 5.我有模型类和实体映射来将现有表映射到那些模型类.这一切都很好,工作得很好.

现在我想嘲笑这个.我创建了Unit Of Work,它接受DataContext并使用Generic Repository.在那之后,我构建了服务,以便能够立即从许多存储库获取数据,并且只需要有一个DataContext实例.这也很有效.

现在问题:我想用模拟数据测试服务.当我创建Unit Of Work实例时,我希望能够插入一个被模拟的DataContext而不是真正的DataContext.

我试图创建一个IContext接口,让真实的和模拟的DataContext实现,但遇到了DbSet的问题.我试图使用IDbSet并创建一个FakeDbSet但没有成功.我还在互联网上读到用IDbSet模拟上下文并使用FakeDbSet是一种糟糕的方法.

你知道最好的方法是什么?我现在拥有的是我想保留的行为,但是我真的希望能够在DataContext中模拟Model类中的数据.

我知道实体框架已经附带了工作单元行为,并且您不需要在其上添加额外的行为.但是我想把它包装在另一个跟踪所有存储库的类中(称为UnitOfWork类).

编辑:我写了两篇文章,用LINQ和Entity Framework解释我的解决方案.

http://gaui.is/how-to-mock-the-datacontext-linq/

http://gaui.is/how-to-mock-the-datacontext-entity-framework/

这是我的代码:

IRepository.cs

public interface IRepository<T> where T : class
{
    void Add(T entity);
    void Delete(T entity);
    void Update(T entity);
    T GetById(long Id);
    IEnumerable<T> All();
    IEnumerable<T> Find(Expression<Func<T, bool>> predicate);
}
Run Code Online (Sandbox Code Playgroud)

IUnitOfWork.cs

public interface IUnitOfWork : IDisposable
{
    IRepository<TEntity> GetRepository<TEntity>() where TEntity : class;
    void Save();
}
Run Code Online (Sandbox Code Playgroud)

Repository.cs

public class Repository<T> : IRepository<T> where T : class
{
    private readonly IDbContext …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc-4 .net-4.5 entity-framework-5

27
推荐指数
1
解决办法
3万
查看次数