Raven.Bundles.UniqueConstraints.Util.GetConstraint C# (CSharp) Method

GetConstraint() public static method

public static GetConstraint ( RavenJToken property ) : UniqueConstraint
property RavenJToken
return UniqueConstraint
        public static UniqueConstraint GetConstraint(RavenJToken property)
        {
            switch (property.Type)
            {
                case JTokenType.String: // backward compatability
                    return new UniqueConstraint { PropName = property.Value<string>() };
                case JTokenType.Object:
                    return new UniqueConstraint { PropName = property.Value<string>("Name"), CaseInsensitive = property.Value<bool>("CaseInsensitive") };
                default:
                    throw new ArgumentOutOfRangeException(property.Type.ToString());
            }
        }
	}

Usage Example

コード例 #1
0
        public override void OnPut(string key, RavenJObject document, RavenJObject metadata, TransactionInformation transactionInformation)
        {
            if (key.StartsWith("Raven/"))
            {
                return;
            }

            var entityName = metadata.Value <string>(Constants.RavenEntityName) + "/";

            var properties = metadata.Value <RavenJArray>(Constants.EnsureUniqueConstraints);

            if (properties == null || properties.Length <= 0)
            {
                return;
            }

            var oldDoc = Database.Get(key, transactionInformation);

            if (oldDoc == null)
            {
                return;
            }

            foreach (var property in metadata.Value <RavenJArray>(Constants.EnsureUniqueConstraints))
            {
                var constraint = Util.GetConstraint(property);

                var newProp = document[constraint.PropName];

                // Handle Updates in the constraint since it changed
                var prefix = "UniqueConstraints/" + entityName + constraint.PropName + "/";

                var oldProp = oldDoc.DataAsJson[constraint.PropName];

                string[] oldUniqueValues;
                if (!Util.TryGetUniqueValues(oldProp, out oldUniqueValues))
                {
                    continue;
                }

                string[] newUniqueValues;
                if (Util.TryGetUniqueValues(newProp, out newUniqueValues))
                {
                    var join = (from oldValue in oldUniqueValues
                                join newValue in newUniqueValues
                                on oldValue equals newValue
                                select oldValue);

                    if (join.Count() == oldUniqueValues.Count())
                    {
                        continue;
                    }
                }

                foreach (var oldUniqueValue in oldUniqueValues)
                {
                    Database.Delete(prefix + Util.EscapeUniqueValue(oldUniqueValue, constraint.CaseInsensitive), null, transactionInformation);
                }
            }
        }
All Usage Examples Of Raven.Bundles.UniqueConstraints.Util::GetConstraint