c# – 使用实体框架的存储库和单元工作模式正确处理?

前端之家收集整理的这篇文章主要介绍了c# – 使用实体框架的存储库和单元工作模式正确处理?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
干杯!我对使用工作单元和存储库有些怀疑.特别是来自Entity Framework的子上下文的角色.
我已经搜索了很多关于这个主题的信息,但是我发现只是不同类型的使用模式,我很困惑,我无法理解主要思考.

1.我应该在哪里实现处置和储蓄?
– 它是否在DbContext的继承类中正确实现了Disposable?
之后在存储库和工作单元中实现或仅在Uni fo工作中实现?

– 把方法保存在工作单元或存储库中?

我的存储库将是Generic
我的代码在建筑师风格和其他细节方面是否正确?请告诉我的想法是否错误.

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

    }

在Logic级别的工作单元之后使用?
请帮我理解这个主题.

我想知道,如何正确使用工作单元和存储库模式,特别是包括DBContext.Also我想知道在哪里使用像Dispose这样的操作.
通常应该在UnitOfWork中进行哪些操作,保存等.
如何在存储库中处理上下文?

解决方法

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

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

添加了与上述相关的更多细节:

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

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

According to Martin Fowler,the Unit of Work pattern “maintains a list
of objects affected by a business transaction and coordinates the
writing out of changes and the resolution of concurrency problems.”

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

One of the best ways to use the Unit of Work pattern is to allow
disparate classes and services to take part in a single logical
transaction. The key point here is that you want the disparate classes
and services to remain ignorant of each other while being able to
enlist in a single transaction.

>“我应该在哪里实现处置和储蓄?”

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

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

>“它是否在DbContext的继承类中正确实现了Disposable?之后在存储库和工作单元中实现或仅在Uni fo工作中实现?”

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

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

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

猜你在找的C#相关文章