entity framework的存储库+ UnitOfWork模式
我上下搜索网络,我没有找到适合我的应用程序的设计。
我正在寻找Repository + UnitOfWork模式,它将管理连接并在完成后自动处理它们。
我需要支持Web应用程序,其中每个请求都有自己的UnitOfWork和Windows应用程序,其中每个线程都有自己的UnitOfWork。 我需要模式自动处理UnitOfWork请求/线程完成。 我也想在exception的情况下支持rolback。
现在我使用StructureMap所以我不想继续在建议答案中使用它。
我需要Repository模式的原因是为了实现我所有实体所需的所有能力。 我需要UnitOfWork的原因是允许更多的实体更改。
我真的很乐意帮助你。
谢谢。
我用这个博客作为一个非常好的起点:
http://www.primaryobjects.com/CMS/Article122.aspx
它从非常开始,并在最后为您提供源代码。 它也使用StructureMap,因此您可能对此有些熟悉。
我会推荐NCommon框架。 你可以在这里找到一个关于它的博客: http : //www.codeinsanity.com/
我去年写了一篇关于编写支持LINQ的存储库的文章,这些存储库可以很容易地伪造成unit testing,并且可以很好地处理dependency injection。 这是文章 。 简而言之,本文描述了一个模拟LINQ to SQL DataContext
的工作单元,并包装了一个抽象实际O / RM工具的IDataMapper
接口。 工作单元包含Repository
类型的属性,例如Repository
或Repository
,并且存储库类实现IQueryable
,它允许您对其进行LINQ。
IDataMapper
是一个简单的界面,如下所示:
public interface IDataMapper : IDisposable { Repository GetRepository () where T : class; void Save(); }
本文中描述的解决方案旨在对unit testing友好且DI友好。 实际上,您需要的唯一配置如下:
string northwindConnection = GetConStr("Northwind"); container.RegisterSingle>( new LinqToSqlNorthwindUnitOfWorkFactory(northwindConnection)); container.RegisterSingle>( new EntityFrameworkSalesUnitOfWorkFactory());
如果您已经拥有工作单元和存储库,并且您正在使用StructureMap,那么问题出在哪里?
您可以简单地将类配置为:
ObjectFactory.Configure(x => x.For() .HybridHttpOrThreadLocalScoped() .Use());
您可以使用dependency injection将工作单元传递给存储库。