/// <summary>
        /// Create current application's extension type metadata.
        /// </summary>
        /// <param name="name">The name.</param>
        /// <param name="category">The category.</param>
        /// <param name="description">The description.</param>
        /// <param name="objectMetadataType">Type of the object metadata.</param>
        /// <param name="isGlobal">if set to <c>true</c> [is global].</param>
        /// <param name="parentObjectMetadataId">The parent object metadata id.</param>
        /// <param name="version">The version.</param>
        /// <returns></returns>
        public Guid AddType(string name, string category, string description, ObjectMetadataTypes objectMetadataType, bool isGlobal, Guid? parentObjectMetadataId, int version)
        {
            Kit.NotNull(name, "name");

            lock (syncObject)
            {
                using (ExtensionModelDataContext ctx = DataContextFactory.Create<ExtensionModelDataContext>())
                {
                    Guid applicationId = isGlobal ? Guid.Empty : this.applicationContext.ApplicationId;
                    bool existedTypeName = ctx.ObjectMetadatas.Where(meta => meta.ApplicationId == applicationId && meta.Name == name).Count() > 0;
                    if (existedTypeName)
                        throw new ValidationException(string.Format(Resources.ExtensionTypeExist, name));

                    if (parentObjectMetadataId.HasValue)
                    {
                        bool validParentObjectMetadataId = ctx.ObjectMetadatas.Where(meta => new[] { applicationId, Guid.Empty }.Contains(meta.ApplicationId) && meta.ObjectMetadataId == parentObjectMetadataId).Count() > 0;
                        if (!validParentObjectMetadataId)
                            throw new ValidationException(string.Format(Resources.IDofSpecifiedParentExtensionTypeIsInvalid, parentObjectMetadataId));
                    }

                    ObjectMetadata metadata = new ObjectMetadata
                    {
                        ApplicationId = applicationId,
                        Name = name,
                        Category = category,
                        Description = description,
                        ParentObjectMetadataId = parentObjectMetadataId,
                        LastUpdatedOn = DateTime.UtcNow
                    };

                    ctx.ObjectMetadatas.InsertOnSubmit(metadata);
                    ctx.SubmitChanges();

                    this.ClearAllObjectMetadataFromCache();
                    return metadata.ObjectMetadataId;
                }
            }
        }
 /// <summary>
 /// Create current application's extension type metadata.
 /// </summary>
 /// <param name="name"></param>
 /// <param name="category"></param>
 /// <param name="description"></param>
 /// <param name="objectMetadataType"></param>
 /// <param name="isGlobal"></param>
 /// <param name="parentObjectMetadataId"></param>
 /// <returns>created extension type id</returns>
 public Guid AddType(string name, string category, string description, ObjectMetadataTypes objectMetadataType, bool isGlobal, Guid? parentObjectMetadataId)
 {
     return AddType(name, category, description, objectMetadataType, isGlobal, parentObjectMetadataId, 1);
 }