/// <summary> /// Refreshes an entity object according to the specified mode. /// </summary> /// <param name="mode">A value that specifies how optimistic concurrency conflicts are handled.</param> /// <param name="entities">The collection of entities to be refreshed.</param> public void Refresh(RefreshMode mode, IEnumerable entities) { CheckDispose(); CheckNotInSubmitChanges(); VerifyTrackingEnabled(); if (entities == null) { throw Error.ArgumentNull("entities"); } List <object> list = entities.Cast <object>().ToList(); DataContext context = CreateRefreshContext(); foreach (object obj2 in list) { MetaType inheritanceRoot = services.Model.GetMetaType(obj2.GetType()).InheritanceRoot; GetTable(inheritanceRoot.Type); TrackedObject trackedObject = services.ChangeTracker.GetTrackedObject(obj2); if (trackedObject == null) { throw Error.UnrecognizedRefreshObject(); } object[] keyValues = CommonDataServices.GetKeyValues(trackedObject.Type, trackedObject.Original); object objectByKey = context.Services.GetObjectByKey(trackedObject.Type, keyValues); if (objectByKey == null) { throw Error.RefreshOfDeletedObject(); } trackedObject.Refresh(mode, objectByKey); } }
/// <summary> /// Resolve member conflicts keeping current values and resetting the baseline original values. /// </summary> /// <param name="refreshMode">The appropriate option from ALinq.RefreshMode.</param> /// <param name="autoResolveDeletes">When true, automatically resolves conflicts resulting from a modified object that is no longer in the database.</param> public void Resolve(RefreshMode refreshMode, bool autoResolveDeletes) { if (autoResolveDeletes && IsDeleted) { ResolveDelete(); } else { if (Database == null) { throw Error.RefreshOfDeletedObject(); } trackedObject.Refresh(refreshMode, Database); isResolved = true; } }