我想在不使用存储库的情况下直接在业务/服务层中使用 EF,但想知道如果我想使用测试数据库使类可测试,创建/处理上下文的最佳位置在哪里?
它应该在服务构造函数中使用 DI 并将类标记为 IDisposable 并在那里摆脱它还是只是将每个调用包装在 using 块中?
我想在不使用存储库的情况下直接在业务/服务层中使用 EF,但想知道如果我想使用测试数据库使类可测试,创建/处理上下文的最佳位置在哪里?
它应该在服务构造函数中使用 DI 并将类标记为 IDisposable 并在那里摆脱它还是只是将每个调用包装在 using 块中?
我不确定您是否不愿意使用存储库类,但这是我一直在为我的服务层创建破坏 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;
}
}