protected ImmutableModelSet <T> GetSet <T>(ModelProperty property, ref ImmutableModelSet <T> value)
        {
            ImmutableModelSet <T> result = value;

            if (result == null)
            {
                result = this.model.GetSet <T>(this.id, property);
                result = Interlocked.CompareExchange(ref value, result, null) ?? result;
            }
            return(result);
        }
Exemple #2
0
        internal ImmutableModelSet <T> GetSet <T>(ObjectId oid, ModelProperty property)
        {
            Debug.Assert(property.IsCollection);
            var greenValue = this.GetGreenValue(oid, property);

            if (greenValue is GreenList)
            {
                return(ImmutableModelSet <T> .FromGreenList((GreenList)greenValue, this, oid));
            }
            else
            {
                Slot slot = oid.Descriptor.GetSlot(property);
                if (!slot.IsCollection)
                {
                    return(ImmutableModelSet <T> .FromGreenSingleValue(greenValue, this, oid));
                }
            }
            return(ImmutableModelSet <T> .FromGreenList(property.IsUnique?GreenList.EmptyUnique : GreenList.EmptyNonUnique, this, oid));
        }