Ejemplo n.º 1
0
        private void ChangeStateToModifiedIfApplicable(T entity)
        {
            if (entity.IsTransientRecord())
            {
                return;
            }

            var entry = InternalContext.Entry(entity);

            if (entry.State == EfState.Detached)
            {
                // Entity was detached before or was explicitly constructed.
                // This unfortunately sets all properties to modified.
                entry.State = EfState.Modified;
            }
            else if (entry.State == EfState.Unchanged)
            {
                // We simply do nothing here, because it is ensured now that DetectChanges()
                // gets implicitly called prior SaveChanges().

                //if (this.AutoCommitEnabledInternal && !ctx.Configuration.AutoDetectChangesEnabled)
                //{
                //	_context.DetectChanges();
                //}
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 更新数据
        /// </summary>
        /// <param name="entity"></param>
        /// <param name="autoLog"></param>
        /// <param name="logAction"></param>
        /// <returns></returns>
        public IEntityLogInfo <T> Update(T entity, bool autoLog = true, string logAction = null)
        {
            Guard.ArgumentNotNull(() => entity);
            if (entity is BaseDataEntity)
            {
                (entity as BaseDataEntity).LastUpdatedOn = DateTime.Now;
            }
            var logInfo = CreateEntityLogInfo(EntityLogActionType.Update, entity, false, logAction);

            if (this.AutoCommitEnabled)
            {
                DbContext.SaveChanges();
            }
            else
            {
                try
                {
                    this.Entities.Attach(entity);
                    InternalContext.Entry(entity).State = System.Data.Entity.EntityState.Modified;
                }
                finally { }
            }
            if (autoLog && _autoUpdateEntityLog)
            {
                logInfo.Update(this.AutoCommitEnabled);
            }
            return(logInfo);
        }
Ejemplo n.º 3
0
        public void Delete(T entity)
        {
            if (entity == null)
            {
                throw new ArgumentNullException("entity");
            }

            if (InternalContext.Entry(entity).State == System.Data.Entity.EntityState.Detached)
            {
                T attachedEntity = Local.SingleOrDefault(e => e.Id == entity.Id);      // You need to have access to key
                if (attachedEntity != null)
                {
                    var attachedEntry = InternalContext.Entry(attachedEntity);
                    attachedEntry.CurrentValues.SetValues(entity);
                }
                else
                {
                    this.Entities.Attach(entity);
                }
            }

            this.Entities.Remove(entity);

            if (this.AutoCommitEnabledInternal)
            {
                _context.SaveChanges();
            }
            else
            {
                _context.SaveChanges();
            }
        }
Ejemplo n.º 4
0
        public void Update(T entity)
        {
            if (entity == null)
            {
                throw new ArgumentNullException("entity");
            }

            if (this.AutoCommitEnabled)
            {
                if (!InternalContext.Configuration.AutoDetectChangesEnabled)
                {
                    InternalContext.Entry(entity).State = System.Data.Entity.EntityState.Modified;
                }
                _context.SaveChanges();
            }
            else
            {
                try
                {
                    this.Entities.Attach(entity);
                    InternalContext.Entry(entity).State = System.Data.Entity.EntityState.Modified;
                }
                finally { }
            }
        }
Ejemplo n.º 5
0
        private void SetEntityStateToModifiedIfApplicable(T entity)
        {
            var entry = InternalContext.Entry(entity);

            if (entry.State == System.Data.Entity.EntityState.Detached || (this.AutoCommitEnabledInternal && !InternalContext.Configuration.AutoDetectChangesEnabled))
            {
                entry.State = System.Data.Entity.EntityState.Modified;
            }
        }
Ejemplo n.º 6
0
        public virtual async Task DeleteAsync(T entity)
        {
            Guard.NotNull(entity, nameof(entity));

            InternalContext.Entry(entity).State = EfState.Deleted;
            if (this.AutoCommitEnabledInternal)
            {
                await _context.SaveChangesAsync();
            }
        }
Ejemplo n.º 7
0
        public virtual void Delete(T entity)
        {
            Guard.NotNull(entity, nameof(entity));

            InternalContext.Entry(entity).State = EfState.Deleted;
            if (this.AutoCommitEnabledInternal)
            {
                _context.SaveChanges();
            }
        }
Ejemplo n.º 8
0
        public virtual async Task DeleteRangeAsync(IEnumerable <T> entities)
        {
            Guard.NotNull(entities, nameof(entities));

            foreach (var entity in entities)
            {
                InternalContext.Entry(entity).State = EfState.Deleted;
            }

            if (this.AutoCommitEnabledInternal)
            {
                await _context.SaveChangesAsync();
            }
        }
Ejemplo n.º 9
0
        private void SetEntityStateToModifiedIfApplicable(T entity)
        {
            if (entity.IsTransientRecord())
            {
                return;
            }

            var entry = InternalContext.Entry(entity);

            if (entry.State < System.Data.Entity.EntityState.Added || (this.AutoCommitEnabledInternal && !InternalContext.Configuration.AutoDetectChangesEnabled))
            {
                entry.State = System.Data.Entity.EntityState.Modified;
            }
        }
Ejemplo n.º 10
0
 public void Delete(T entity)
 {
     if (entity == null)
     {
         throw new ArgumentNullException("entity");
     }
     if (InternalContext.Entry(entity).State == System.Data.EntityState.Detached)
     {
         this.Entities.Attach(entity);
     }
     this.Entities.Remove(entity);
     if (this.AutoCommitEnabled)
     {
         _context.SaveChanges();
     }
 }
Ejemplo n.º 11
0
        /// <summary>
        /// 删除实体对象
        /// </summary>
        /// <param name="entity"></param>
        /// <param name="autoLog"></param>
        /// <returns></returns>
        public IEntityLogInfo <T> Delete(T entity, bool autoLog = true)
        {
            Guard.ArgumentNotNull(() => entity);
            var logInfo = CreateEntityLogInfo(EntityLogActionType.Delete, entity, autoLog);

            if (InternalContext.Entry(entity).State == System.Data.Entity.EntityState.Detached)
            {
                this.Entities.Attach(entity);
            }

            this.Entities.Remove(entity);

            if (this.AutoCommitEnabled)
            {
                DbContext.SaveChanges();
            }
            return(logInfo);
        }
Ejemplo n.º 12
0
        public void UpdateRange(IEnumerable <T> entities)
        {
            if (entities == null)
            {
                throw new ArgumentNullException("entities");
            }

            if (this.AutoCommitEnabledInternal)
            {
                if (!InternalContext.Configuration.AutoDetectChangesEnabled)
                {
                    entities.Each(entity =>
                    {
                        InternalContext.Entry(entity).State = System.Data.Entity.EntityState.Modified;
                    });
                }
                _context.SaveChanges();
            }
            else
            {
                try
                {
                    entities.Each(entity =>
                    {
                        if (InternalContext.Entry(entity).State == System.Data.Entity.EntityState.Detached)
                        {
                            T attachedEntity = Local.SingleOrDefault(e => e.Id == entity.Id);  // You need to have access to key
                            if (attachedEntity != null)
                            {
                                var attachedEntry = InternalContext.Entry(attachedEntity);
                                attachedEntry.CurrentValues.SetValues(entity);
                            }
                            else
                            {
                                this.Entities.Attach(entity);
                                InternalContext.Entry(entity).State = System.Data.Entity.EntityState.Modified;
                            }
                        }
                    });
                    _context.SaveChanges();
                }
                finally { }
            }
        }
Ejemplo n.º 13
0
        public virtual void DeleteRange(IEnumerable <T> entities)
        {
            if (entities == null)
            {
                throw new ArgumentNullException("entities");
            }

            entities.Each(entity =>
            {
                if (InternalContext.Entry(entity).State == System.Data.Entity.EntityState.Detached)
                {
                    this.Entities.Attach(entity);
                }
            });

            this.Entities.RemoveRange(entities);

            if (this.AutoCommitEnabledInternal)
            {
                _context.SaveChanges();
            }
        }