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
,所以我很难选择哪两个更好用。
你的问题不是傻瓜! UnitOfWork
和Repository
模式入门需要一些时间。
首先,要使一些终端合适。 UnitOfWork
封装了一组操作并将它们组合在一起。 因此,您可以在一个逻辑组中创建客户,产品和相应的订单。
Repository
为您提供单点访问实体,大多数时候都有一些特定的方法来检索数据。
多个存储库可以在一个事务中使用,这就是他们共享UnitOfWork
的原因。
在您发布的示例中,T4文件创建了一些Repository
接口。 一个是readonly,其中包含选择实体的方法,但另一个Repository
具有Add
和Delete
等方法。
因此,如果要添加实体,则需要首先构造UnitOfWork
,然后为您使用的实体类型(例如CustomerRepository
或ProductRepository
)实例化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。 这是一个完整的其他主题,但这意味着您不直接构造UnitOfWork
和Repository
,而是使用您设置的某些配置将它们“注入”到您的代码中。
如果您的项目是Web,则创建一个处理程序,在请求中启动事务并在最后一步结束它。
我想在这里可以找到一个更简单的例子: https : //github.com/ayende/CourseSampleApp您还可以在nhibernate上找到满足您需求的其他样本。