/// <summary> /// Persists the tag names, if required, to the Tag table. When a tag has previously been /// used, no action is taken because the tag already exists in that table. Additional code /// in <see cref="MetadataTagRepository.Save(GalleryServerPro.Data.MetadataDto,System.Collections.Generic.IEnumerable{string},int)" /> /// deletes the tag if it is no longer applied to any metadata items. /// </summary> /// <param name="metaName">A <see cref="Business.Metadata.MetadataItemName"/> indicating the type of tag. /// Must be either <see cref="Business.Metadata.MetadataItemName.Tags" /> or <see cref="Business.Metadata.MetadataItemName.People" />.</param> /// <param name="tags">The tags to persist.</param> internal void Save(Business.Metadata.MetadataItemName metaName, IEnumerable <string> tags) { if ((metaName != Business.Metadata.MetadataItemName.Tags) && (metaName != Business.Metadata.MetadataItemName.People)) { return; } foreach (var tag in tags) { if (!Context.Tags.Any(t => t.TagName.Equals(tag.Trim(), StringComparison.Ordinal))) { Context.Tags.Add(new TagDto { TagName = tag.Trim() }); } } Save(); }
/// <summary> /// Persists the tag names, if required, to the Tag table. When a tag has previously been /// used, no action is taken because the tag already exists in that table. Additional code /// in <see cref="MetadataTagRepository.Save(MetadataDto,System.Collections.Generic.IEnumerable{string},int)" /> /// deletes the tag if it is no longer applied to any metadata items. /// </summary> /// <param name="metaName">A <see cref="Business.Metadata.MetadataItemName"/> indicating the type of tag. /// Must be either <see cref="Business.Metadata.MetadataItemName.Tags" /> or <see cref="Business.Metadata.MetadataItemName.People" />.</param> /// <param name="tags">The tags to persist.</param> internal void Save(Business.Metadata.MetadataItemName metaName, IEnumerable <string> tags) { if ((metaName != Business.Metadata.MetadataItemName.Tags) && (metaName != Business.Metadata.MetadataItemName.People)) { return; } // We need a lock to prevent other threads from inserting tags at the same time (which was cause a duplicate error) lock (_sharedLock) { foreach (var tag in tags) { if (!Context.Tags.Any(t => t.TagName.Equals(tag.Trim(), StringComparison.Ordinal))) { Context.Tags.Add(new TagDto { TagName = tag.Trim() }); } } Save(); } }