/// <summary>
        /// Maps <see cref="ProductVariantDetachedContentDisplay"/> to <see cref="IProductVariantDetachedContent"/>.
        /// </summary>
        /// <param name="display">
        /// The display.
        /// </param>
        /// <param name="productVariantKey">
        /// The product Variant Key.
        /// </param>
        /// <returns>
        /// The <see cref="IProductVariantDetachedContent"/>.
        /// </returns>
        public static IProductVariantDetachedContent ToProductVariantDetachedContent(this ProductVariantDetachedContentDisplay display, Guid productVariantKey)
        {
            var contentType = new DetachedContentType(
                display.DetachedContentType.EntityTypeField.TypeKey,
                display.DetachedContentType.UmbContentType.Key)
                                  {
                                      Key = display.DetachedContentType.Key,
                                      Name = display.DetachedContentType.Name,
                                      Description = display.DetachedContentType.Description
                                  };

            // Assign the default template
            var templateId = 0;
            if (display.TemplateId == 0 && display.DetachedContentType.UmbContentType.DefaultTemplateId != 0)
            {
                templateId = display.DetachedContentType.UmbContentType.DefaultTemplateId;
            }

            var pvdc = new ProductVariantDetachedContent(productVariantKey, contentType, display.CultureName, new DetachedDataValuesCollection(display.DetachedDataValues))
                           {
                               TemplateId = templateId,
                               Slug = display.Slug,
                               CanBeRendered = display.CanBeRendered
                           };
            if (!display.Key.Equals(Guid.Empty)) pvdc.Key = display.Key;
            return pvdc;
        }
        /// <summary>
        /// Creates a <see cref="IDetachedContentType"/> without saving it to the database.
        /// </summary>
        /// <param name="entityTfKey">
        /// The entity type field key.
        /// </param>
        /// <param name="contentTypeKey">
        /// The content type key.
        /// </param>
        /// <param name="name">
        /// The name.
        /// </param>
        /// <param name="raiseEvents">
        /// Optional boolean indicating whether or not to raise events.
        /// </param>
        /// <returns>
        /// The <see cref="IDetachedContentType"/>.
        /// </returns>
        public IDetachedContentType CreateDetachedContentType(
            Guid entityTfKey,
            Guid contentTypeKey,
            string name,
            bool raiseEvents = true)
        {
            Mandate.ParameterCondition(!Guid.Empty.Equals(entityTfKey), "entityTfKey");

            var dt = new DetachedContentType(entityTfKey, contentTypeKey.Equals(Guid.Empty) ? (Guid?)null : contentTypeKey) { Name = name };

            if (raiseEvents)
            if (Creating.IsRaisedEventCancelled(new Events.NewEventArgs<IDetachedContentType>(dt), this))
            {
                dt.WasCancelled = true;
                return dt;
            }

            return dt;
        }