public static void ToModelValue(this ViewModels.MixDatabaseDataValues.UpdateViewModel item,
                                        JToken property,
                                        MixCmsContext _context             = null,
                                        IDbContextTransaction _transaction = null)
        {
            if (property == null)
            {
                return;
            }

            if (item.Column.IsEncrypt)
            {
                var obj = property.Value <JObject>();
                item.StringValue  = obj.ToString(Formatting.None);
                item.EncryptValue = obj["data"]?.ToString();
                item.EncryptKey   = obj["key"]?.ToString();
            }
            else
            {
                switch (item.Column.DataType)
                {
                case MixDataType.DateTime:
                    item.DateTimeValue = property.Value <DateTime?>();
                    item.StringValue   = property.Value <string>();
                    break;

                case MixDataType.Date:
                    item.DateTimeValue = property.Value <DateTime?>();
                    item.StringValue   = property.Value <string>();
                    break;

                case MixDataType.Time:
                    item.DateTimeValue = property.Value <DateTime?>();
                    item.StringValue   = property.Value <string>();
                    break;

                case MixDataType.Double:
                    item.DoubleValue = property.Value <double?>();
                    item.StringValue = property.Value <string>();
                    break;

                case MixDataType.Boolean:
                    item.BooleanValue = property.Value <bool?>();
                    item.StringValue  = property.Value <string>()?.ToLower();
                    break;

                case MixDataType.Integer:
                    item.IntegerValue = property.Value <int?>();
                    item.StringValue  = property.Value <string>();
                    break;

                case MixDataType.Reference:
                    item.StringValue = property.Value <string>();
                    break;

                case MixDataType.Upload:
                    string mediaData = property.Value <string>();
                    if (mediaData.IsBase64())
                    {
                        ViewModels.MixMedias.UpdateViewModel media = new ViewModels.MixMedias.UpdateViewModel()
                        {
                            Specificulture = item.Specificulture,
                            Status         = MixContentStatus.Published,
                            MediaFile      = new FileViewModel()
                            {
                                FileStream = mediaData,
                                Extension  = ".png",
                                Filename   = Guid.NewGuid().ToString(),
                                FileFolder = "Attributes"
                            }
                        };
                        var saveMedia = media.SaveModel(true, _context, _transaction);
                        if (saveMedia.IsSucceed)
                        {
                            item.StringValue = saveMedia.Data.FullPath;
                        }
                    }
                    else
                    {
                        item.StringValue = mediaData;
                    }
                    break;

                case MixDataType.Json:
                    item.StringValue = property.HasValues ? property.Value <JObject>().ToString() : null;
                    break;

                case MixDataType.Tag:
                    item.StringValue = property.HasValues ? property.Value <JArray>().ToString() : null;
                    break;

                case MixDataType.Custom:
                case MixDataType.Duration:
                case MixDataType.PhoneNumber:
                case MixDataType.Text:
                case MixDataType.Html:
                case MixDataType.MultilineText:
                case MixDataType.EmailAddress:
                case MixDataType.Password:
                case MixDataType.Url:
                case MixDataType.ImageUrl:
                case MixDataType.CreditCard:
                case MixDataType.PostalCode:
                case MixDataType.Color:
                case MixDataType.Icon:
                case MixDataType.VideoYoutube:
                case MixDataType.TuiEditor:
                default:
                    item.StringValue = property.Value <string>();
                    break;
                }
            }
        }
        public static JProperty ToJProperty(
            this ViewModels.MixDatabaseDataValues.UpdateViewModel item,
            MixCmsContext _context,
            IDbContextTransaction _transaction)
        {
            switch (item.DataType)
            {
            case MixDataType.DateTime:
                return(new JProperty(item.MixDatabaseColumnName, item.DateTimeValue));

            case MixDataType.Date:
                if (!item.DateTimeValue.HasValue)
                {
                    if (DateTime.TryParseExact(
                            item.StringValue,
                            "MM/dd/yyyy HH:mm:ss",
                            CultureInfo.InvariantCulture,
                            DateTimeStyles.RoundtripKind,
                            out DateTime date))
                    {
                        item.DateTimeValue = date;
                    }
                }
                return(new JProperty(item.MixDatabaseColumnName, item.DateTimeValue));

            case MixDataType.Time:
                return(new JProperty(item.MixDatabaseColumnName, item.DateTimeValue));

            case MixDataType.Double:
                return(new JProperty(item.MixDatabaseColumnName, item.DoubleValue ?? 0));

            case MixDataType.Boolean:
                return(new JProperty(item.MixDatabaseColumnName, item.BooleanValue));

            case MixDataType.Integer:
                return(new JProperty(item.MixDatabaseColumnName, item.IntegerValue ?? 0));

            case MixDataType.Reference:
                return(new JProperty(item.MixDatabaseColumnName, new JArray()));

            case MixDataType.Upload:
                string domain = MixService.GetAppSetting <string>(MixAppSettingKeywords.Domain);
                string url    = !string.IsNullOrEmpty(item.StringValue)
                   ? !item.StringValue.Contains(domain)
                        ? $"{MixService.GetAppSetting<string>(MixAppSettingKeywords.Domain.TrimEnd('/'))}/{item.StringValue.TrimStart('/')}"
                        : item.StringValue
                   : null;
                return(new JProperty(item.MixDatabaseColumnName, url));

            case MixDataType.Tag:
                try
                {
                    return(new JProperty(item.MixDatabaseColumnName, JArray.Parse(item.StringValue)));
                }
                catch
                {
                    return(new JProperty(item.MixDatabaseColumnName, new JArray()));
                }

            case MixDataType.Custom:
            case MixDataType.Duration:
            case MixDataType.PhoneNumber:
            case MixDataType.Text:
            case MixDataType.Html:
            case MixDataType.MultilineText:
            case MixDataType.EmailAddress:
            case MixDataType.Password:
            case MixDataType.Url:
            case MixDataType.ImageUrl:
            case MixDataType.CreditCard:
            case MixDataType.PostalCode:
            case MixDataType.Color:
            case MixDataType.Icon:
            case MixDataType.VideoYoutube:
            case MixDataType.TuiEditor:
            default:
                return(new JProperty(item.MixDatabaseColumnName, item.StringValue));
            }
        }