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; } } }