public void AddMetadata <TMetadata>(TMetadata metadata) where TMetadata : IMetadata { if (metadata == null) { throw new ArgumentNullException(nameof(metadata)); } if (metadata.Relation == null) { throw new ArgumentNullException(nameof(metadata.Relation)); } MetadataKey key = MetadataKey.FromIdentity <TMetadata>(metadata.Relation.Identity); if (!this.entries.TryAdd(key, metadata)) { throw new InvalidOperationException("Metadata already added."); } }