簡體   English   中英

使用實體框架使用存儲庫和單元工作模式正確處置?

[英]Correct disposing using Repository and Unit Work patterns with Entity Framework?

干杯!我對使用工作單元和存儲庫有些懷疑。 特別是來自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實現工作單元的精彩文章

我通常在業務交易完成后處置該單元。 例如,如果操作是創建一個父項,一些子項並附加它們,我會在完成后立即處理。

添加了與上述相關的更多細節:

在重讀你的問題時,聽起來你想要更多關於工作單元理論的信息而不是實際的實現,我的道歉。

這是與MSDN相關的更好的文章,但我將為您總結。

根據Martin Fowler的說法,工作單元模式“維護一個受業務事務影響的對象列表,並協調寫入更改和解決並發問題。”

通常,我使用工作單元模式將所有相關的存儲庫集合在一起,以解決並發問題,同時仍然將存儲庫分開。

使用工作單元模式的最佳方法之一是允許不同的類和服務參與單個邏輯事務。 這里的關鍵點是,您希望不同的類和服務在能夠在單個事務中登記時保持彼此無知。

  • “我應該在哪里實現處置和儲蓄?”

我不確定我是否完全理解你的問題,但我認為你在問什么應該管理工作單元的生命周期?

這是與此相關的另一個SO帖子 ,但摘要是當前擁有工作單元的任何內容,它與您如何設置工作單元的范圍有關。 例如,它可以是業務命令或MVC操作。

  • “它是否在DbContext的繼承類中正確實現了Disposable?之后在存儲庫和工作單元中實現或僅在Uni fo工作中實現?”

你的意思是,你應該在哪里處理DbContext? 我認為它應該在工作單元中。 如果您在一個工作單元中創建/處理多個上下文,也許您應該將它們分成兩個不同的單元。

  • put方法保存在工作單元或存儲庫中?

您的工作單元處理上下文和事務,並且應包含防止重復更新的邏輯,因此您的保存功能應由您的工作單元控制。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM