[英]Work with database transactions in a functional manner in C#
我一直在看這種代碼,並且想知道,如果從函數式編程的角度出發,有什么可以改進的地方嗎?
您不必嚴格地重新實現我的示例即可回答,如果您有涉及事務的其他示例,那就太好了。
using (var unitOfWork = _uowManager.Begin())
{
_paymentRepository
.InsertOrUpdate(payment); // Returns payment instance
// Being executed to get Payment.Id
_uowManager
.SaveChanges();
_otherRepository
.OtherMethod(payment.Id); // Could be changed as necessary
unitOfWork
.Complete()
}
如果有幫助,以上代碼基於ASP.NET Boilerplate和Entity Framework。
我認為創建事務性monad是處理此問題的好方法。 C#中的FP數量無關緊要,這會帶來很多好處:
我用這樣的東西:
public class Tx
{
public DbConnectionExtra _connection { get; set; } // class which has DbTransaction and DbConnection combined
public T UseTx<T>(Func<T> fnToCall)
{
try
{
_connection.BeginTransaction();
var result = fnToCall();
_connection._transaction.Commit();
_connection._transaction.Dispose();
return result;
}
catch
{
_connection._transaction.Rollback();
_connection._transaction.Dispose();
throw;
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.