Example #1
0
        /// <inheritdoc/>
        public virtual async Task <T> Edit(T edited, bool resetOld)
        {
            if (edited == null)
            {
                throw new ArgumentNullException(nameof(edited));
            }

            bool lazyLoading = Database.ChangeTracker.LazyLoadingEnabled;

            Database.ChangeTracker.LazyLoadingEnabled = false;
            try
            {
                T old = await GetWithTracking(edited.ID);

                if (resetOld)
                {
                    old = Merger.Nullify(old);
                }
                Merger.Complete(old, edited, x => x.GetCustomAttribute <LoadableRelationAttribute>() == null);
                await EditRelations(old, edited, resetOld);

                await Database.SaveChangesAsync();

                return(old);
            }
            finally
            {
                Database.ChangeTracker.LazyLoadingEnabled = lazyLoading;
                Database.ChangeTracker.Clear();
            }
        }