Dar*_*Zon 15 c# design-patterns entity-framework repository unit-of-work
我正在考虑使用EF 4开始一个新项目并浏览一些文章,我发现了一些关于EF的文章和存储库模式以及工作单元
(http://tdryan.blogspot.com/2011/03/another-entity-framework-4-repository_15.html和http://blogs.msdn.com/b/adonet/archive/2009/06/16/using -repository-and-unit-of-work-patterns-with-entity-framework-4-0.aspx)
我正在使用第一个(第1部分,第2部分和第3部分).它们非常相似.
在这种情况下,我是新手.我在这两个帖子之间感到困惑.我已经创建了所有内容,但我不知道如何开始使用上下文并添加一些实体.我发布了第二个链接,因为发布了实现它的方法.该ObjectContext来源于IUnitOfWork,所以我很困惑,以选择这两个的是更好地使用.
Wou*_*ort 32
你的问题不是傻瓜!入门UnitOfWork和Repository模式需要一些时间.
首先,要使一些终端合适.A UnitOfWork封装了一组操作并将它们组合在一起.因此,您可以在一个逻辑组中创建客户,产品和相应的订单.
A Repository为您提供单点访问实体,大多数时间都有一些特定的方法来检索数据.
多个存储库可以在一个单独的事务中使用,这就是它们共享的原因UnitOfWork.
在您发布的示例中,T4文件创建了一些Repository接口.一个是readonly用方法来选择实体,但另一个Repository有像Add和的方法Delete.
所以,如果你想添加一个实体,你需要先创建UnitOfWork,然后实例化Repository的实体(键入您的工作CustomerRepository或ProductRepository为例).然后,您可以使用该Add方法将实体添加到a Repository.完成存储库操作后,您可以调用UnitOfWork.Commit()将更改保存到数据库中.
IUnitOfWork unitOfWork = new EFUnitOfWork();
IRepository<Customer> customerRepository = new CustomerEFRepository(unitOfWork);
Customer c = new Customer();
// init customer
customerRepository.Add(c);
unitOfWork.Commit();
Run Code Online (Sandbox Code Playgroud)
在您发布的示例中,使用了使用StructureMap的依赖注入.这是完全是另一个问题,但它意味着你没有构建UnitOfWork和Repository直接,但他们使用的一些配置,你已经设置"注入"到你的代码.
如果您的项目是网络项目,请创建一个处理程序,根据请求启动事务并在最后一步结束事务。
我认为可以在这里找到一个更简单的示例: https: //github.com/ayende/CourseSampleApp 另外,您还可以在 nhibernate 上找到其他可以满足您需求的示例。