2013-04-25 105 views
1

我一直在考虑在F#中实现电子支付系统。一个关键的要求是交易管理。F#交易管理

我用了Dapper的TransactionScope,它运行良好。我可以使用Tranq来管理数据库事务,但想使用类似TransactionScope的东西来管理在线操作。

相对较新的F#,我不知道是否有什么如果线到线,从C#到F#方法翻译,等效于

using (var trans = new TransactionScope()) 
{ 
    ...//operations 
    trans.Complete(); 
} 

是错误的,那么有没有更管理交易的“功能方式”?

回答

7

F#与C#有一个类似的using块。

using (new Thing()) (fun x -> x.DoStuff ...) 

But there is also a use binding in F#,它的工作原理类似,只是它let调用Dispose当对象超出范围。这不是太难做一个新类型,包装TransactionScope当它,如果它没有被回滚Code的配置要求Complete ...

这也将有可能使一个workflow builder打理事务。

但是,使用数据库层(如处理事务需求的实体框架)可能会更好。