public void Save(IEventProvider eventProvider) { if (!_isRunningWithinTransaction) { throw new Exception("Opperation is not running within a transaction"); } var version = GetEventProviderVersion(eventProvider, _sqLiteTransaction); if (version != eventProvider.Version) { throw new ConcurrencyViolationException(); } foreach (var domainEvent in eventProvider.GetChanges()) { SaveEvent(domainEvent, eventProvider, _sqLiteTransaction); } eventProvider.UpdateVersion(eventProvider.Version + eventProvider.GetChanges().Count()); UpdateEventProviderVersion(eventProvider, _sqLiteTransaction); }
private static void UpdateAggregateVersion(IEventProvider eventProvider) { const string updateProviderVersion = @"UPDATE EventSource SET Version = @version WHERE Id = @id;"; eventProvider.UpdateVersion(); using (var connection = new MySqlConnection(connectionString)) { using (var command = connection.CreateCommand()) { command.CommandText = updateProviderVersion; command.Parameters.Add("@id", MySqlDbType.Guid).Value = eventProvider.Id; command.Parameters.Add("@version", MySqlDbType.Int64).Value = eventProvider.Version; connection.Open(); command.ExecuteNonQuery(); } } }