干杯!我对将工作单元与存储库一起使用有一些疑问。特别是 Entity Framework 中子上下文的角色。
我搜索了很多有关该主题的信息,但是所有发现的只是使用模式的不同类型,我感到困惑,而且我无法理解主要思想。

1.我应该在哪里实现处置和节省?
-是否在DbContext的继承类中正确实现了Disposable?
之后在存储库和工作单元中还是仅在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

    }

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

我想知道如何正确地结合使用工作单元模式和存储库模式,尤其是包括DBContext。此外,我还想知道在何处使用诸如Dispose之类的操作。
哪些操作通常应该在UnitOfWork,Save等中。
如何在存储库中处理上下文?

最佳答案

这是关于使用MVC实现工作单元的great article

我通常在业务交易完成后就处置该部门。例如,如果操作是要创建一个父级,一些子级并附加它们,则完成后,我将立即处理。

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

在重读您的问题时,听起来您想了解有关工作单元理论而不是实际实现的更多信息,我深表歉意。

这是与之相关的更好的文章on MSDN,但我将为您总结。



通常,我使用工作单元模式将所有相关的存储库组合在一起,以解决并发问题,同时仍将存储库保持独立。


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

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

    这是与此相关的另一个SO post,但是摘要是当前拥有工作单元的任何内容,并且与您如何设置工作单元的范围有关。例如,它可以是业务命令或MVC操作。
  • “在DbContext的继承类中正确实现了Disposable吗?在存储库和工作单元中还是仅在Uni fo Work中实现了Disposable?”

  • 您的意思是,应该在哪里处置DbContext?我认为应该以工作为单位。如果要在一个工作单元中创建/处理多个上下文,也许应该将它们分成两个不同的单元。
  • 将put方法保存在工作单元或存储库中的位置?

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

    关于c# - 在Entity Framework中使用存储库和单元工作模式正确处理吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11809979/

    10-12 00:28
    查看更多