public void Save(IGalleryObjectMetadataItemCollection metadata)
        {
            IGalleryObjectMetadataItemCollection metadataItemsToSave = metadata.GetItemsToSave();

            if (metadataItemsToSave.Count == 0)
            {
                return;                 // Nothing to save
            }

            int tmpId = 0;
            var mDtos = new Dictionary <int, MetadataDto>();
            var metas = new Dictionary <int, IGalleryObjectMetadataItem>();

            // There is at least one item to persist to the data store.
            foreach (IGalleryObjectMetadataItem metaDataItem in metadataItemsToSave)
            {
                MetadataDto mDto;
                if (SaveInternal(metaDataItem, out mDto) == SaveAction.Inserted)
                {
                    metas.Add(++tmpId, metaDataItem);
                    mDtos.Add(tmpId, mDto);
                }
            }

            Save();

            // Loop through each metadata item again, find the matching DTO object, and update
            // the newly assigned ID.
            foreach (var kvp in metas)
            {
                MetadataDto mDto;
                if (mDtos.TryGetValue(kvp.Key, out mDto))
                {
                    kvp.Value.MediaObjectMetadataId = mDto.MetadataId;
                }
            }
        }