예제 #1
0
        /// <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);
            }
        }
예제 #2
0
 /// <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;
     }
 }