- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在考虑使用 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
派生的,所以我很困惑选择这两个中哪个更好用。
最佳答案
你的问题不傻!开始使用 UnitOfWork
和 Repository
模式需要一些时间。
首先,要正确使用一些术语。 UnitOfWork
封装了一组操作并将它们组合在一起。例如,您可以在一个逻辑组中创建客户、产品和相应的订单。
Repository
为您提供对实体的单一访问点,并且大多数时候都有一些特定的方法来检索数据。
可以在一个事务中使用多个存储库,这就是它们共享一个 UnitOfWork
的原因。
在您发布的示例中,T4 文件创建了一些Repository
接口(interface)。一个是只读的,具有选择实体的方法,但另一个 Repository
具有 Add
和 Delete
等方法。
因此,如果你想添加一个实体,你需要先构造一个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)。这是一个完全不同的主题,但这意味着您不会直接构建 UnitOfWork
和 Repository
,而是使用您配置的一些配置将它们“注入(inject)”到您的代码中'设置。
关于c# - Entity Framework + 存储库 + 工作单元,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8722039/
我是一名优秀的程序员,十分优秀!