没有存储库的EF 4.3上下文

时间:2012-07-12 07:02:49

标签: c# entity-framework

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

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

1 个答案:

答案 0 :(得分:1)

我不确定您对存储库类的不情愿,但这是我一直在为我的服务层创建一个销毁EF上下文的地方。

因此,对于我的MVC Web应用程序,我使用带有lifetimescope的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;
    }
}
相关问题