![](/img/trans.png)
[英]Correct implementation of UnitOfWork and Repository pattern in Entity Framework
[英]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.