internal static object CreateMediaLinkEntry(string fullTypeName, Stream requestStream, IDataService service, System.Data.Services.RequestDescription description, UpdateTracker tracker) { object target = service.Updatable.CreateResource(description.LastSegmentInfo.TargetContainer.Name, fullTypeName); tracker.TrackAction(target, description.LastSegmentInfo.TargetContainer, UpdateOperations.Add); SetStreamPropertyValue(target, requestStream, service, description); return(target); }
internal static object HandleBindOperation(System.Data.Services.RequestDescription description, object linkResource, IDataService service, UpdateTracker tracker) { ResourceSetWrapper wrapper; object target = GetEntityResourceToModify(description, service, true, out wrapper); description.UpdateAndCheckEpmFeatureVersion(wrapper, service); tracker.TrackAction(target, wrapper, UpdateOperations.Change); if (description.IsSingleResult) { service.Updatable.SetReference(target, description.Property.Name, linkResource); return(target); } service.Updatable.AddReferenceToCollection(target, description.Property.Name, linkResource); return(target); }
/// <summary> /// Creates a Media Link Entry. /// </summary> /// <param name="fullTypeName">Full type name for the MLE to be created.</param> /// <param name="requestStream">Request stream from the host.</param> /// <param name="service">Service this request is against.</param> /// <param name="description">Description of the target request.</param> /// <param name="tracker">Update tracker instance to fire change interceptor calls</param> /// <returns>Newly created Media Link Entry.</returns> internal static object CreateMediaLinkEntry(string fullTypeName, Stream requestStream, IDataService service, RequestDescription description, UpdateTracker tracker) { Debug.Assert(!string.IsNullOrEmpty(fullTypeName), "!string.IsNullOrEmpty(fullTypeName)"); Debug.Assert(requestStream != null, "requestStream != null"); Debug.Assert(service != null, "service != null"); Debug.Assert(description != null, "description != null"); Debug.Assert(tracker != null, "tracker != null"); object entity = service.Updatable.CreateResource(description.LastSegmentInfo.TargetResourceSet.Name, fullTypeName); tracker.TrackAction(entity, description.LastSegmentInfo.TargetResourceSet, UpdateOperations.Add); SetStreamPropertyValue(entity, requestStream, service, description); return entity; }
/// <summary> /// Handle bind operation /// </summary> /// <param name="description">information about the request uri.</param> /// <param name="linkResource">the child resource which needs to be linked.</param> /// <param name="service">data service instance</param> /// <param name="tracker">update tracker instance to fire change interceptor calls</param> /// <returns>returns the parent object to which an new object was linked to.</returns> internal static object HandleBindOperation(RequestDescription description, object linkResource, IDataService service, UpdateTracker tracker) { Debug.Assert(description != null, "description != null"); Debug.Assert(linkResource != null, "linkResource != null"); Debug.Assert(service != null, "service != null"); Debug.Assert(tracker != null, "tracker != null"); ResourceSetWrapper container; object entityGettingModified = Deserializer.GetEntityResourceToModify(description, service, true /*allowCrossReference*/, out container); tracker.TrackAction(entityGettingModified, container, UpdateOperations.Change); Debug.Assert(description.Property != null, "description.Property != null"); if (description.IsSingleResult) { service.Updatable.SetReference(entityGettingModified, description.Property.Name, linkResource); } else { service.Updatable.AddReferenceToCollection(entityGettingModified, description.Property.Name, linkResource); } return entityGettingModified; }
/// <summary> /// Handle bind operation /// </summary> /// <param name="description">information about the request uri.</param> /// <param name="linkResource">the child resource which needs to be linked.</param> /// <param name="service">data service instance</param> /// <param name="tracker">update tracker instance to fire change interceptor calls</param> /// <returns>returns the parent object to which an new object was linked to.</returns> internal static object HandleBindOperation(RequestDescription description, object linkResource, IDataService service, UpdateTracker tracker) { Debug.Assert(description != null, "description != null"); Debug.Assert(linkResource != null, "linkResource != null"); Debug.Assert(service != null, "service != null"); Debug.Assert(tracker != null, "tracker != null"); object entityGettingModified; ResourceSetWrapper container; object resourceToBeModified = Deserializer.GetResourceToModify(description, service, true /*allowCrossReference*/, out entityGettingModified, out container, false /*checkETag*/); Debug.Assert(resourceToBeModified == entityGettingModified, "Since this is a link operation, modifying resource must be the entity resource"); // If the container we are modifying contains any type with FF mapped KeepInContent=false properties, we need to raise the FeatureVersion. description.UpdateAndCheckEpmFeatureVersion(container, service); tracker.TrackAction(entityGettingModified, container, UpdateOperations.Change); Debug.Assert(description.Property != null, "description.Property != null"); if (description.IsSingleResult) { service.Updatable.SetReference(entityGettingModified, description.Property.Name, linkResource); } else { service.Updatable.AddReferenceToCollection(entityGettingModified, description.Property.Name, linkResource); } return entityGettingModified; }