为了使用缓存,是否需要对每个NHibernate操作使用事务?

为了使用缓存,是否需要对每个NHibernate操作使用事务?,nhibernate,transactions,Nhibernate,Transactions,为了使用缓存,每个NHibernate操作都需要使用事务吗?为什么?在数据库系统中,事务旨在将几个较小的原子操作包装成一个较大的操作 典型的例子是将资金从一个支票账户转移到另一个账户。这两种原子操作是: 从一个账户中借记$x.xx 将x.xx美元贷记到另一个帐户 这两个原子操作被包装在一个事务中,这样,如果其中一个操作失败,您就可以回滚整个事务,系统就不会处于银行或客户的钱太多或太少,或者有钱下落不明的状态 因此,如果您的操作是一个简单的原子操作,比如更改表中的单个字段,那么不,我认为您不需要事

为了使用缓存,每个NHibernate操作都需要使用事务吗?为什么?

在数据库系统中,事务旨在将几个较小的原子操作包装成一个较大的操作

典型的例子是将资金从一个支票账户转移到另一个账户。这两种原子操作是:

  • 从一个账户中借记$x.xx
  • 将x.xx美元贷记到另一个帐户
  • 这两个原子操作被包装在一个事务中,这样,如果其中一个操作失败,您就可以回滚整个事务,系统就不会处于银行或客户的钱太多或太少,或者有钱下落不明的状态


    因此,如果您的操作是一个简单的原子操作,比如更改表中的单个字段,那么不,我认为您不需要事务处理。

    在数据库系统中,事务旨在将几个较小的原子操作包装成一个较大的操作

    典型的例子是将资金从一个支票账户转移到另一个账户。这两种原子操作是:

  • 从一个账户中借记$x.xx
  • 将x.xx美元贷记到另一个帐户
  • 这两个原子操作被包装在一个事务中,这样,如果其中一个操作失败,您就可以回滚整个事务,系统就不会处于银行或客户的钱太多或太少,或者有钱下落不明的状态


    因此,如果您的操作是一个简单的原子操作,比如更改表中的单个字段,那么不,我认为您不需要事务处理。

    如果您不使用显式事务。大多数数据库将使用隐式事务。这意味着您所做的每个查询都将包装在一个事务中,该事务在查询完成时提交。见本文:


    因此,最好将应用程序操作包装在事务中,即使它们所做的只是获取数据。特别是因为您的问题是关于缓存的,如果您想按照参考文章的要求使用二级缓存,则需要使用事务。

    如果您不使用显式事务。大多数数据库将使用隐式事务。这意味着您所做的每个查询都将包装在一个事务中,该事务在查询完成时提交。见本文:


    因此,最好将应用程序操作包装在事务中,即使它们所做的只是获取数据。特别是因为您的问题是关于缓存的,如果您想根据参考文章使用二级缓存,您需要使用事务。

    谢谢您的回答。但我的问题遗漏了一些东西。所以更新了我的问题。@Robert Harvey我真的从你的回答中得到了一个想法。我现在面临许多原子操作的问题,例如GetMember ResetPassword SendEmail,每个操作都有自己的事务,因此我需要获得每个操作的结果。如果我可以将所有操作包装在单个事务中,这将非常好,如果任何操作失败,它将回滚。现在,我需要手动检测如下错误:var result=GetMember();如果(结果)结果=重置密码();如果(结果)result=sendmail();那么多如果检查,那么您是否有任何ASP.NET WebForm的示例设计模式。Thanks@embarus:您描述的是程序逻辑,而不是数据库操作(尽管可能涉及数据库)。如果要将这些操作包装到数据库事务中,则必须用SQL表示。感谢您的回复。但我的问题遗漏了一些东西。所以更新了我的问题。@Robert Harvey我真的从你的回答中得到了一个想法。我现在面临许多原子操作的问题,例如GetMember ResetPassword SendEmail,每个操作都有自己的事务,因此我需要获得每个操作的结果。如果我可以将所有操作包装在单个事务中,这将非常好,如果任何操作失败,它将回滚。现在,我需要手动检测如下错误:var result=GetMember();如果(结果)结果=重置密码();如果(结果)result=sendmail();那么多如果检查,那么您是否有任何ASP.NET WebForm的示例设计模式。Thanks@embarus:您描述的是程序逻辑,而不是数据库操作(尽管可能涉及数据库)。如果要将这些操作包装到数据库事务中,则必须用SQL表示。感谢您的回复。但我的问题遗漏了一些东西。所以更新了我的问题。@afsharm,如果缺少的是缓存,请再次查看我的答案。简而言之:如果不使用事务,NH不会使用二级缓存。谢谢您的回答。但我的问题遗漏了一些东西。所以更新了我的问题。@afsharm,如果缺少的是缓存,请再次查看我的答案。简而言之:如果不使用事务,NH不会使用二级缓存。