10

干杯!我对将工作单元与存储库一起使用有些疑问。特别是实体框架中的子上下文角色。我已经搜索了很多关于这个主题的信息,但我发现的只是不同类型的使用模式,我很困惑,我无法理解主要思想。

1.我应该在哪里实现配置和保存?- 在 DbContext 的 Inheritance 类中是否正确实现 Disposable?之后在 Repository 和 Unit of Work 中实现还是在 Uni fo Work 中实现?

- 将方法保存在工作单元或存储库中的位置?

我的存储库将是通用的 我的代码在架构师风格和其他细节上是否正确?请告诉我的想法是否错误。

    interface IRepository : IDisposable
    {
        void Create();
        void Delete();
        void Update();
        void Get();
        T getSomeByExpression()
        ...Some another costum operations
        ...should I remember about Save here? 
    }

    class Repository : IRepository
    {
        SomeContext context = new SomeContext();
        ...Using using(context = new SomeContext()){} in functions??
        ... 
        ....Disposing?
    }

    interface IUnitOfWork : IDisposable
    {
     ...Which methods I should realize?
    Commit()
    Save()
    ...Need some another methods like rollback, Attach() Add() or Dispose or something else?
    }
    class UnitOfWork
    {
     ...Collection of Repository

    }

在逻辑级别的工作单元之后使用?请帮助我理解这个主题。

我想知道,如何正确使用 Unit Of Work 和 Repository 模式,特别是包括 DBContext。我还想知道在哪里使用一些操作,如 Dispose。UnitOfWork一般应该在哪些操作,Save等。如何在repository中配置上下文?

4

1 回答 1

14

这是一篇关于使用 MVC 实现工作单元的精彩文章

一旦业务交易完成,我通常会处置该单位。例如,如果该操作是创建一个父级、一些子级并附加它们,我会在完成后立即处理。

添加了与上述相关的更多详细信息:

在重读你的问题时,听起来你想要更多关于工作单元理论而不是实际实现的信息,我很抱歉。

这是MSDN上与此相关的更好的文章,但我会为您总结。

根据 Martin Fowler 的说法,工作单元模式“维护受业务事务影响的对象列表,并协调更改的写入和并发问题的解决”。

通常,我使用工作单元模式将所有相关的存储库汇集在一起​​,以解决并发问题,同时仍然保持存储库分离。

使用工作单元模式的最佳方法之一是允许不同的类和服务参与单个逻辑事务。这里的关键点是您希望不同的类和服务在能够参与单个事务的同时保持彼此不了解。

  • “我应该在哪里实现处置和保存?”

我不确定我是否完全理解您的问题,但我想您是在问什么应该管理工作单元的生命周期?

这是与此相关的另一篇SO 帖子,但摘要是目前拥有该工作单元的任何内容,它与您如何设置工作单元的范围有关。例如,它可以是业务命令或 MVC 操作。

  • “在 DbContext 的 Inheritance 类中正确实现 Disposable?之后在 Repository 和 Unit of Work 中实现还是在 Uni fo Work 中实现?”

你的意思是,你应该在哪里处理 DbContext?我认为它应该在工作单元中。如果您在单个工作单元中创建/处理多个上下文,也许您应该将它们分成 2 个不同的单元。

  • 在工作单元或存储库中将方法保存在哪里?

您的工作单元是处理上下文和事务,并且应该包含防止重复更新的逻辑,因此您的保存功能应该由您的工作单元控制。

于 2012-08-04T16:04:47.383 回答