1

我想在不使用存储库的情况下直接在业务/服务层中使用 EF,但想知道如果我想使用测试数据库使类可测试,创建/处理上下文的最佳位置在哪里?

它应该在服务构造函数中使用 DI 并将类标记为 IDisposable 并在那里摆脱它还是只是将每个调用包装在 using 块中?

4

1 回答 1

1

我不确定您是否不愿意使用存储库类,但这是我一直在为我的服务层创建破坏 EF 上下文的地方。

因此,对于我的 MVC Web 应用程序,我使用 Autofac 和生命周期范围注册存储库

builder
       .RegisterType<AccountRepository>()
       .AsImplementedInterfaces()
       .InstancePerLifetimeScope();

我的帐户服务将从容器中获取对存储库实例的引用,并将在 Web 请求的整个生命周期内访问单个上下文。请求完成后,Autofac 将在存储库上调用 dispose 并清理上下文。

public sealed class AccountRepository : IAccountRepository, IDisposable
{
    private AccountContext _context = new AccountContext();

    public IList<AccountEntity> GetAccounts()
    {
        return _context.Accounts
            .OrderBy(x => x.Name)
            .ToList();
    } 

    public void Dispose()
    {
        _context.Dispose();
        _context = null;
    }
}
于 2012-07-12T10:09:33.570 回答