entity framework+存储库+工作单元

我正在考虑使用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部分)。 它们非常相似。

在这种情况下,我是新手。 我在这两个post之间感到困惑。 我已经创建了所有内容,但我不知道如何开始使用上下文并添加一些实体。 我发布了第二个链接,因为发布了实现它的方法。 ObjectContext派生自IUnitOfWork ,所以我很难选择哪两个更好用。

你的问题不是傻瓜! UnitOfWorkRepository模式入门需要一些时间。

首先,要使一些终端合适。 UnitOfWork封装了一组操作并将它们组合在一起。 因此,您可以在一个逻辑组中创建客户,产品和相应的订单。

Repository为您提供单点访问实体,大多数时候都有一些特定的方法来检索数据。

多个存储库可以在一个事务中使用,这就是他们共享UnitOfWork的原因。

在您发布的示例中,T4文件创建了一些Repository接口。 一个是readonly,其中包含选择实体的方法,但另一个Repository具有AddDelete等方法。

因此,如果要添加实体,则需要首先构造UnitOfWork ,然后为您使用的实体类型(例如CustomerRepositoryProductRepository )实例化Repository 。 然后,您可以使用Add方法将实体添加到Repository 。 当您使用完储存库后,您可以调用UnitOfWork.Commit()将更改保存到数据库中。

 IUnitOfWork unitOfWork = new EFUnitOfWork(); IRepository customerRepository = new CustomerEFRepository(unitOfWork); Customer c = new Customer(); // init customer customerRepository.Add(c); unitOfWork.Commit(); 

在您发布的示例中,使用了使用StructureMap的dependency injection。 这是一个完整的其他主题,但这意味着您不直接构造UnitOfWorkRepository ,而是使用您设置的某些配置将它们“注入”到您的代码中。

如果您的项目是Web,则创建一个处理程序,在请求中启动事务并在最后一步结束它。

我想在这里可以找到一个更简单的例子: https : //github.com/ayende/CourseSampleApp您还可以在nhibernate上找到满足您需求的其他样本。