Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.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#_.net_Transactions - Fatal编程技术网

C# 数据库和内存任务之间的事务?

C# 数据库和内存任务之间的事务?,c#,.net,transactions,C#,.net,Transactions,我想在数据库中做一些工作,然后在内存中做一些任务(比如更改对象的一些值),我想在同一事务中合并这两个任务 我使用的是EF4.1,它只为我提供了SaveChanges方法,它可以自己进行事务处理。只要SaveChanges不抛出异常,我就可以在内存上执行一些任务。这是一个解决办法。但它破坏了应用程序的体系结构。因为在该任务之前不会调用SaveChanges。当调用任务时,它无法知道SaveChanges将来是否成功 是否可以在数据库和内存任务之间进行任何事务 如果是这样的话,我们如何做到这一点 J

我想在数据库中做一些工作,然后在内存中做一些任务(比如更改对象的一些值),我想在同一事务中合并这两个任务

我使用的是EF4.1,它只为我提供了SaveChanges方法,它可以自己进行事务处理。只要SaveChanges不抛出异常,我就可以在内存上执行一些任务。这是一个解决办法。但它破坏了应用程序的体系结构。因为在该任务之前不会调用SaveChanges。当调用任务时,它无法知道SaveChanges将来是否成功

是否可以在数据库和内存任务之间进行任何事务


如果是这样的话,我们如何做到这一点

Juval Lowy在MSDN中有一篇名为“解释如何围绕内存类型创建事务包装”的优秀文章

在其核心,您希望实现。一旦为要成为事务一部分的内存中类型实现了此功能,就必须通过调用来注册实例,以便对事务进行通知

通常,您可以通过查看static是否为null来调用
inclustevolatile
,如果不为null,则向该static注册(例如,这是中的类为了自注册所做的事情)

但是,一旦知道
事务
已就绪(例如,在创建实例之后),就可以在任何地方登记实例

如果不想进行上述操作,还可以订阅,并根据通过传递给事件处理程序的返回的
事务的状态更改内存变量的状态

您可以通过
事务
上的获取a。
TransactionInformation
类具有一个从返回的值,该值指示事务的状态(已提交、已中止等)