带存储过程的DDD规范模式

时间:2012-05-01 08:55:25

标签: asp.net-mvc-3 entity-framework stored-procedures domain-driven-design specification-pattern

我将编写一个存储过程,它将根据查询撤回X个记录。此SP可能需要在搜索时锁定记录。我也使用EF,我知道不能使用悲观锁定。

我没有在查询本身中使用过滤逻辑,而是考虑使用规范模式,因此业务逻辑将指示查询。如果我使用这种模式并将规范传递到我的存储库中,而存储库又调用SP,SP将如何知道如何处理规范?

规范可以包含跨越多个表并在不同列上排序的标准。

在这种情况下使用规范模式是否有意义,还是应该使用在那里定义的查询和过滤来创建SP?

2 个答案:

答案 0 :(得分:2)

规范模式用于在应用程序中定义和执行查询 - Linq是一种规范。存储过程用于直接在数据库服务器中定义和执行查询。这两者大多是相反的方法。

有可能在存储过程中创建动态SQL,但这会将您的逻辑移动到与DDD无关的数据库。此外,在需要连接其他表的任意过滤器中使用此类解决方案会非常复杂。

答案 1 :(得分:0)

当前尚无法将C#lambda表达式中的规范转换为可传递给存储过程以查询数据库的结构。仅当您打算充分利用ORM(而非存储过程)时,规范模式才有用。