/// <summary> /// Tracks the AddRelatedObject method. /// </summary> /// <param name="data">The data service context data on which to apply state transition.</param> /// <param name="source">The source.</param> /// <param name="sourcePropertyName">Name of the source property.</param> /// <param name="target">The target.</param> public static void TrackAddRelatedObject(this DataServiceContextData data, object source, string sourcePropertyName, object target) { CheckEntityIsNotTracked(data, target); EntityDescriptorData sourceDescriptorData = GetTrackedEntityDescriptorData(data, source, "Cannot add link:", "source"); CheckStateIsNot(EntityStates.Deleted, sourceDescriptorData, "Cannot add related object:", "source"); EntityDescriptorData targetDescriptorData = data.CreateEntityDescriptorData(EntityStates.Added, data.GetNextChangeOrder(), target); data.CreateLinkDescriptorData(EntityStates.Added, uint.MaxValue, sourceDescriptorData, sourcePropertyName, targetDescriptorData); targetDescriptorData .SetParentForInsert(source) .SetParentPropertyForInsert(sourcePropertyName); }
/// <summary> /// Tracks the AddObject method. /// </summary> /// <param name="data">The data service context data on which to apply state transition.</param> /// <param name="entitySetName">Name of the entity set.</param> /// <param name="entity">The entity.</param> public static void TrackAddObject(this DataServiceContextData data, string entitySetName, object entity) { CheckEntitySetName(ref entitySetName); CheckEntityIsNotTracked(data, entity); var entityDescriptorData = data.CreateEntityDescriptorData(EntityStates.Added, data.GetNextChangeOrder(), entity) .SetEntitySetName(entitySetName); if (data.ResolveEntitySet != null) { entityDescriptorData.InsertLink = data.ResolveEntitySet(entitySetName); } else { entityDescriptorData.InsertLink = new Uri(UriHelpers.ConcatenateUriSegments(data.BaseUri.OriginalString, entitySetName)); } }
/// <summary> /// Tracks the AttachTo method. /// </summary> /// <param name="data">The data service context data on which to apply state transition.</param> /// <param name="entitySetName">Name of the entity set.</param> /// <param name="entity">The entity.</param> /// <param name="identity">The identity.</param> /// <param name="entityETag">The etag for the entity.</param> /// <param name="editLink">The edit link for the entity</param> public static void TrackAttachTo(this DataServiceContextData data, string entitySetName, object entity, Uri identity, string entityETag, Uri editLink) { CheckEntitySetName(ref entitySetName); CheckEntityIsNotTracked(data, entity); CheckIdentity(data, identity); data.CreateEntityDescriptorData(EntityStates.Unchanged, data.GetNextChangeOrder(), entity) .SetEntitySetName(entitySetName) .SetETag(entityETag) .SetIdentity(identity) .SetEditLink(editLink); }