gpt4 book ai didi

c# - Entity Framework + 存储库 + 工作单元

转载 作者:可可西里 更新时间:2023-11-01 03:14:12 25 4
gpt4 key购买 nike

我正在考虑使用 EF 4 开始一个新项目并浏览了一些文章,我发现了一些关于 EF 的文章以及存储库模式和工作单元

(http://tdryan.blogspot.com/2011/03/another-entity-framework-4-repository_15.htmlhttp://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 派生的,所以我很困惑选择这两个中哪个更好用。

最佳答案

你的问题不傻!开始使用 UnitOfWorkRepository 模式需要一些时间。

首先,要正确使用一些术语。 UnitOfWork 封装了一组操作并将它们组合在一起。例如,您可以在一个逻辑组中创建客户、产品和相应的订单。

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

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

在您发布的示例中,T4 文件创建了一些Repository 接口(interface)。一个是只读的,具有选择实体的方法,但另一个 Repository 具有 AddDelete 等方法。

因此,如果你想添加一个实体,你需要先构造一个UnitOfWork,然后为你使用的实体类型实例化一个Repository (CustomerRepository ProductRepository 为例)。然后,您可以使用 Add 方法将实体添加到 Repository。处理完存储库后,您可以调用 UnitOfWork.Commit() 将更改保存到数据库。

IUnitOfWork unitOfWork = new EFUnitOfWork();

IRepository<Customer> customerRepository = new CustomerEFRepository(unitOfWork);

Customer c = new Customer();

// init customer

customerRepository.Add(c);
unitOfWork.Commit();

在您发布的示例中,使用了带有 StructureMap 的依赖注入(inject)。这是一个完全不同的主题,但这意味着您不会直接构建 UnitOfWorkRepository,而是使用您配置的一些配置将它们“注入(inject)”到您的代码中'设置。

关于c# - Entity Framework + 存储库 + 工作单元,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8722039/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com