// Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using System; using System.Collections.Generic; namespace osu.Game.Database { public class DatabaseWriteUsage : IDisposable { public readonly OsuDbContext Context; private readonly Action usageCompleted; public DatabaseWriteUsage(OsuDbContext context, Action onCompleted) { Context = context; usageCompleted = onCompleted; } public bool PerformedWrite { get; private set; } private bool isDisposed; public List Errors = new List(); /// /// Whether this write usage will commit a transaction on completion. /// If false, there is a parent usage responsible for transaction commit. /// public bool IsTransactionLeader = false; protected void Dispose(bool disposing) { if (isDisposed) return; isDisposed = true; try { PerformedWrite |= Context.SaveChanges() > 0; } catch (Exception e) { Errors.Add(e); throw; } finally { usageCompleted?.Invoke(this); } } public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } ~DatabaseWriteUsage() { Dispose(false); } } }