public void Save(DataContainerCollection dataContainers)
        {
            CheckDisposed();
            ArgumentUtility.CheckNotNull("dataContainers", dataContainers);

            if (dataContainers.Count == 0)
            {
                return;
            }

            var providerDefinition = dataContainers[0].ClassDefinition.StorageEntityDefinition.StorageProviderDefinition;

            if (dataContainers.Any(dataContainer => dataContainer.ClassDefinition.StorageEntityDefinition.StorageProviderDefinition != providerDefinition))
            {
                throw CreatePersistenceException("Save does not support multiple storage providers.");
            }

            var provider = _storageProviderManager.GetMandatory(providerDefinition.Name);

            provider.BeginTransaction();

            try
            {
                provider.Save(dataContainers);
                provider.UpdateTimestamps(dataContainers.Where(dc => dc.State != StateType.Deleted));
                provider.Commit();
            }
            catch
            {
                try
                {
                    provider.Rollback();
                }
// ReSharper disable EmptyGeneralCatchClause
                catch
// ReSharper restore EmptyGeneralCatchClause
                {
                }

                throw;
            }
        }