簡體   English   中英

實體框架的存儲庫+ UnitOfWork模式

[英]Repository + UnitOfWork pattern for entity framework

我在網上上下搜索,但沒有設法找到適合我的應用程序的設計。
我正在尋找Repository + UnitOfWork模式,該模式將管理連接並在完成后自動處理它們。

我需要同時支持每個請求將具有其自己的UnitOfWork的Web應用程序和每個線程將具有其自己的UnitOfWork的Windows應用程序。 我需要模式來自動處理UnitOfWork請求/線程完成。 如果出現異常,我也想支持回滾。

現在,我使用StructureMap,所以我不在乎繼續在建議的答案中使用它。

我需要存儲庫模式的原因是要實現我所有實體所需的所有功能。 我需要UnitOfWork的原因是允許更改多個實體。

我真的會尋求任何幫助。

謝謝。

我使用此博客作為一個很好的起點:

http://www.primaryobjects.com/CMS/Article122.aspx

它從非常開始就開始,並在最后為您提供源代碼。 它還使用StructureMap,因此您可能有點熟悉。

我會推薦NCommon框架。 您可以在此處找到有關它的博客: http : //www.codeinsanity.com/

去年,我寫了一篇有關編寫支持LINQ的存儲庫的文章,該存儲庫很容易偽造用於單元測試,並且可以很好地與依賴注入一起使用。 這是文章 簡而言之,本文描述了一個模擬LINQ to SQL DataContext的工作單元,並包裝了一個IDataMapper接口,該接口抽象了實際的O / RM工具。 工作單元包含Repository<TEntity>類型的屬性,例如Repository<Customer>Repository<Order>並且該存儲庫類實現了IQueryable<T> ,它使您可以對其進行LINQ。

IDataMapper是一個簡單的界面,如下所示:

public interface IDataMapper : IDisposable
{
    Repository<T> GetRepository<T>() where T : class;

    void Save();
}

本文中描述的解決方案旨在實現單元測試友好和DI友好。 實際上,您唯一需要的配置如下:

string northwindConnection = GetConStr("Northwind");

container.RegisterSingle<IUnitOfWorkFactory<NorthwindUnitOfWork>>(
    new LinqToSqlNorthwindUnitOfWorkFactory(northwindConnection));

container.RegisterSingle<IUnitOfWorkFactory<SalesUnitOfWork>>(
    new EntityFrameworkSalesUnitOfWorkFactory());

如果您已經有工作單元和存儲庫,並且正在使用StructureMap,那么問題出在哪里?

您可以簡單地將類配置為:

ObjectFactory.Configure(x => x.For<IUnitOfWork>()
                              .HybridHttpOrThreadLocalScoped()
                              .Use<EFUnitOfWork>());

而且,您可以使用依賴項注入將工作單元傳遞給存儲庫。

暫無
暫無

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

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