c# - 如何使用 Entity Framework 4 在桌面服务器端应用程序中正确实现每个范围和存储库的工作单元?

标签 c# entity-framework repository-pattern unit-of-work

我在 IoC 容器工作单元模式中实现和注册时遇到问题,问题如下: 在服务器端客户端-服务器应用程序上,我需要访问我正在使用 Entity Framework 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 被注入(inject)到 Repository 中

 abstract class Repository<TEntity> : IRepository<TEntity> where TEntity : EntityBase 
{
   private readonly IDataContext _context;

    protected Repository(IDataContext context)
    {
        _context = context;
    }
  }

作为 IRepository 作为 IDataContext 在 IoC contanier 中注册为每个依赖项的实例, 以及我需要什么我想通过以下方式使用工作单元:

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

                repository.Commit();
        }
    }

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

最佳答案

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

通过进行该更改,您可以简单地在存储库工厂构造函数中采用工作单元。

关于c# - 如何使用 Entity Framework 4 在桌面服务器端应用程序中正确实现每个范围和存储库的工作单元?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15614154/

相关文章:

c# - 如何获取 Windows 应用商店应用程序的本地化显示名称

mysql - 强制 Entity Framework 代码首先重新创建应用程序运行时删除的数据库

c# - 如何使用连接与通用存储库模式 - Entity Framework

asp.net - EF 模型和代码使用者之间存储库的使用

C# Form 不将值插入 SQL Server 数据库

C# 双格式对齐小数点

c# - UseSqlServer 未在 DbContextOptionBuilder 中定义

repository-pattern - 从多个 DTO 构建域对象

c# - .NET Core SDK/运行时和 NuGet 包版本是否必须匹配?

nhibernate - 我为什么要为 Entity Framework 而烦恼?