如何使用实体框架在桌面服务器端应用程序中正确实现每个范围和存储库的工作单元

本文关键字:范围 存储 单元 工作 实现 框架 实体 何使用 桌面 服务器端 应用程序 | 更新日期: 2023-09-27 18:05:35

我有一个在IoC容器工作单元模式中实现和注册的问题,问题如下:在服务器端客户端服务器应用程序,我需要访问数据库,我使用实体框架4 ORM,我需要创建新的DataContext从客户端应用程序数据库的请求,它类似于在Web MVC应用程序。我意识到我需要使用工作单元模式,目前我是这样实现的:

    void SomeMethod()
    {
        using (var repository = _repositoryFactory.Create())
        {
            int id = 1;
            var entity = repository.GetById(id);
            // some code 
                repository.SaveOrUpdate();
        }
    }

其中_repositoryFactory在IoC中注册为Single instance并返回Repository的新实例DataContext被注入到Repository

 abstract class Repository<TEntity> : IRepository<TEntity> where TEntity : EntityBase 
{
   private readonly IDataContext _context;
    protected Repository(IDataContext context)
    {
        _context = context;
    }
  }

as IRepository as IDataContext在IoC容器中作为每个依赖的实例注册,和我需要什么,我想使用单位的工作如下方式:

 void SomeMethod()
    {
        using (var unitOfWork = _unitOfWorkFactory.Create())
        {
            int id = 1;
            var entity = _repository.GetById(id);
            // some code 
                repository.Commit();
        }
    }

如何在IoC中正确实现此逻辑和注册,或者在这种情况下我应该考虑其他方法,解决此问题的最佳方法是什么?

如何使用实体框架在桌面服务器端应用程序中正确实现每个范围和存储库的工作单元

不要混淆生命周期。存储库工厂也可以限定范围。性能损失最小。

通过这样的更改,您可以简单地在存储库工厂构造函数中获取工作单元。