Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/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
Linq 最好的项目模式是;“工作单位”;在业务层_Linq_Linq To Sql_Design Patterns_Unit Of Work_Atomicity - Fatal编程技术网

Linq 最好的项目模式是;“工作单位”;在业务层

Linq 最好的项目模式是;“工作单位”;在业务层,linq,linq-to-sql,design-patterns,unit-of-work,atomicity,Linq,Linq To Sql,Design Patterns,Unit Of Work,Atomicity,我在C#.NET中有一个桌面项目,它的结构是:gui、业务和数据访问层。每个业务层类表示数据库的一个实体。我正在使用linq访问数据库。但是现在项目的实现方式不允许以原子方式进行许多操作,我需要在业务层完成这些操作 我搜索了一些设计模式,找到了unitOfWork,它在提交所有更改后,在相同的上下文中执行数据层中的所有操作。这将使操作原子化。但问题是,我想做的操作需要在验证之前进行,这意味着,我需要在验证之前从业务层调用方法,而不是从数据层调用方法。业务层中的这个调用将创建另一个工作单元,从而创

我在C#.NET中有一个桌面项目,它的结构是:gui、业务和数据访问层。每个业务层类表示数据库的一个实体。我正在使用linq访问数据库。但是现在项目的实现方式不允许以原子方式进行许多操作,我需要在业务层完成这些操作

我搜索了一些设计模式,找到了unitOfWork,它在提交所有更改后,在相同的上下文中执行数据层中的所有操作。这将使操作原子化。但问题是,我想做的操作需要在验证之前进行,这意味着,我需要在验证之前从业务层调用方法,而不是从数据层调用方法。业务层中的这个调用将创建另一个工作单元,从而创建另一个上下文,打破我正在尝试执行的更大操作的原子性


问题是:在同一linq上下文中,从业务层调用业务层的一个或多个方法的最佳项目模式是什么

  • 在业务层的顶部创建一个服务层
  • 这个服务层由两个服务组成(可以是真正的WCF服务,也可以是普通的C#类):一个用于阅读,一个用于写作
  • 读取服务不是事务性的,它只包含执行查询(即读取数据)的方法
  • 写作服务是事务性的;它的所有方法要么创建事务上下文,要么遵循工作单元模式
  • 写入服务在其业务层上执行C/U/D操作之前访问读取服务进行验证

看起来不错。这个项目模式有名字吗?我想搜索更多关于这个的信息?谢谢它松散地基于CQRS:命令/查询责任分离。