1

我有一个应用程序,我正在使用Entity Framework 4.1作为我的数据访问层。我创建了几个与不同实体一起工作的存储库。作为构造函数的一部分,每个存储库都有一个UnitOfWork对象。然后,我为这些带有服务层的存储库创建了一个抽象。每个图层都会创建一个UnitOfWork,然后传递给其各自的存储库。一次打开多个UnitOfWork实例(ASP.Net Applicaiton)是不是一个好主意?

在我的服务层,我应该只打开一个可以被我创建的所有服务使用的UOW吗?我还没有遇到任何问题,但是想知道我在做什么可能会导致问题。

作为一个说明,在我的web应用程序,我只用一个实体类型同时插入更新数据时的工作。当我不得不实例化主实体的一个服务,然后可能有另一个服务来读取来自数据库中的配置表的静态数据时,我的担心就出现了。

回答

1

如果你有多个工作单位,你最终将有问题的,因为如果你尝试从一个上下文(工作单位),从另一个上下文的实体相关的实体,您将有一个变化跟踪碰撞。

假设您有一个名为.Task或某些类似的业务层,每个任务应该实例化一个工作单元并将其传递到它调用的存储库,因为它是任务而不是回购,它应该知道实体是如何汇集在一起​​。

默认情况下,如果没有提供默认的UOW,这是可以的 - 但是这会导致松散的任务编码,最终创建一个没有WOW的UO,然后使用它的输出自己的UOW。

避免工作的一个普通的静态单元,以及 - 因为再次,任务,不回购或模型时,应适用变更时,应当决定。

+0

我的回购要求,一个UOW中被传递,就像你说的,我不希望回购负责这一点。那么,在你的任务示例中,似乎我会一次打开多个UOW? – DDiVita 2011-06-15 20:19:10

+0

不 - 对于混淆抱歉 - 说你有一个任务,建立一个关联公司的用户帐户。您的任务将创建一个UOW,然后在为用户实例化存储库和公司存储库时使用它,并使用同样的UOW。您将获取想要的公司,将其附加到新用户,然后使用该用户添加到用户回购协议。两个回购协议共享相同的UOW,因此不存在实体更改跟踪器冲突。 – 2011-06-16 13:06:32

2

,因为你需要一个请求处理过程中你可以有工作情况的尽可能多的单位。工作单元表示单一逻辑操作。

为了简单(在大多数情况下它是足够)的开发人员通常用一个新的工作单个单元为每个请求,因为每个请求通常代表一个逻辑操作。但是你可以找到这种情况,这是不够的。在这种情况下,您将需要多个工作单元,并且可能还需要多个存储库(每个工作单元都与一个工作单元关联)。

相关问题