Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 工作单元、存储库、上下文_C#_Design Patterns - Fatal编程技术网

C# 工作单元、存储库、上下文

C# 工作单元、存储库、上下文,c#,design-patterns,C#,Design Patterns,如果你看一下,我有一个关于下一步的问题 假设您有两个生成项和子项的存储库。我还有一个UnitOfWork,它充当对(在这个简单的例子中)两个不同项的更改的上下文 似乎有几种生成UnitOfWork的方法,有时将其注入存储库,有时由工厂生成(然后注入或从工厂检索) 我的问题是UnitOfWork如何通知存储库现在要提交其更改 我想我可以让存储库订阅UnitOfWork上的事件以进行提交/回滚 第二个问题,如果我有权的话,工作单元的概念是协调可能发生冲突的更新UnitOfWork对此进行了协调,因此

如果你看一下,我有一个关于下一步的问题

假设您有两个生成项和子项的存储库。我还有一个UnitOfWork,它充当对(在这个简单的例子中)两个不同项的更改的上下文

似乎有几种生成UnitOfWork的方法,有时将其注入存储库,有时由工厂生成(然后注入或从工厂检索)

我的问题是UnitOfWork如何通知存储库现在要提交其更改

我想我可以让存储库订阅UnitOfWork上的事件以进行提交/回滚

第二个问题,如果我有权的话,工作单元的概念是协调可能发生冲突的更新UnitOfWork对此进行了协调,因此首先写入项,从而允许写入子项?现在我似乎需要工作单元来了解似乎错误的存储库


谢谢。

我构建存储库的方式是让UnitOfWork只是一个“令牌”,由BeginUnitOfWork()生成方法,然后必须将其传递给Repo上进行DB调用的几乎任何其他方法。从概念上讲,它必须知道的唯一一件事是如何处理,这会导致与该UOW关联的NHibernate会话关闭。它通过向Repo中的受保护方法授予一个委托来完成此操作这对我来说是完全抽象了实际的数据访问机制;无论后端如何,我都可以实现相同的模式,并且模式的用户不能通过破解UnitOfWork来获取实际的数据访问机制


YMMV;它确实要求需要执行DB对象的类依赖于存储库和工作单元。您可以使用额外的委托来公开工作单元本身的方法,这将允许它成为唯一的依赖项。

很有趣。我认为我在开始时遇到的一个概念性问题是当操作被添加到工作单元中时,工作单元可以保持相当长的时间。一旦我重新构建了它的框架,这样持久性调用就不会无限期地延迟,管理起来就容易多了。