Asp.net mvc 3 要求在我的存储库中显式调用SaveChanges是否正确?

Asp.net mvc 3 要求在我的存储库中显式调用SaveChanges是否正确?,asp.net-mvc-3,repository-pattern,Asp.net Mvc 3,Repository Pattern,我目前正在MVC 3应用程序中实现一个。我正在实现的所有以某种方式更改数据的存储库方法(主要是添加*和删除*)目前都不调用SaveChanges方法。我明确要求存储库的用户执行此操作 当然,另一个选择是,我总是在我的变异方法中调用SaveChanges 这里的最佳实践是什么?为什么?我已经习惯了第一种方法,但我很好奇第二种方法是否有更好的理由?通常从业务或用例的角度来看,一个工作单元涉及到对许多数据实体的修改 您确实希望在事务中存储所有修改,或者在提交过程中失败时不存储任何修改 因此,最好在工作

我目前正在MVC 3应用程序中实现一个。我正在实现的所有以某种方式更改数据的存储库方法(主要是添加*和删除*)目前都不调用SaveChanges方法。我明确要求存储库的用户执行此操作

当然,另一个选择是,我总是在我的变异方法中调用SaveChanges


这里的最佳实践是什么?为什么?我已经习惯了第一种方法,但我很好奇第二种方法是否有更好的理由?

通常从业务或用例的角度来看,一个工作单元涉及到对许多数据实体的修改

您确实希望在事务中存储所有修改,或者在提交过程中失败时不存储任何修改


因此,最好在工作单元结束时只调用一次SaveChanges,而不要在Add、Update和Delete方法中调用。

通常,从业务或用例的角度来看,工作单元涉及对许多数据实体的修改

您确实希望在事务中存储所有修改,或者在提交过程中失败时不存储任何修改


因此,最好在工作单元结束时只调用一次SaveChanges,而不要在Add、Update和Delete方法中调用。

我认为无论采用哪种方法,都有很好的理由。但是,如果您的变异方法没有将更改持久化到数据库中,那么让您知道这一点很重要。我要做的是提供允许调用方指定的重载。此外,通过intellisense(如果我们可以假设每个人的IDE在2012年都有该功能),提供重载可以非常清楚地表明这些方法中的每一个都有重载。否则,您将依赖存储库的用户来阅读您的文档(现在没有人再这样做了,对吧?)

我认为无论采用哪种方式都有很好的理由。但是,如果您的变异方法没有将更改持久化到数据库中,那么让您知道这一点很重要。我要做的是提供允许调用方指定的重载。此外,通过intellisense(如果我们可以假设每个人的IDE在2012年都有该功能),提供重载可以非常清楚地表明这些方法中的每一个都有重载。否则,您将依赖存储库的用户来阅读您的文档(现在没有人这样做了,对吧?)