Ejemplo n.º 1
0
        public virtual TransactionResult Delete(T entity, string headerkeyvalue = null, bool useLog = true)
        {
            if (Context.Database.Connection.State != ConnectionState.Open)
            {
                Context.Database.Connection.Open();
            }

            TransactionScope scope = new TransactionScope();

            try
            {
                var keyvalue = entity.GetValue(MasterKey.IsNullOrEmpty() ? GetKeys[0] : MasterKey);
                var row      = Find(entity);
                entity = row; Context.Entry(entity).State = EntityState.Deleted;
                if (BeforeDelete != null)
                {
                    var eventUseData = new EventUseData();
                    BeforeDelete.Invoke(entity, Context, eventUseData);
                    if (eventUseData.Cancel)
                    {
                        scope.Dispose();
                        return(eventUseData.Message);
                    }
                }

                //if (_user.FollowUp && useLog)
                //{
                //    Context.LogEntity(entity, _user, GetKeys[0], _formType, headerkeyvalue, headerkeyvalue);
                //}
                Context.SaveChanges();

                //var lkpWebControllers = Context.lkp_WebControllers.FirstOrDefault(c => c.formType == _formType); //c.ControllerName.Equals(_controllername, StringComparison.OrdinalIgnoreCase) ||
                //if (lkpWebControllers != null)
                //{
                //    int formType = lkpWebControllers.formType;
                //    RemoveAttachments(formType, keyvalue.ToString());
                //}

                scope.Complete();
                if (AfterDelete != null)
                {
                    EventBase eventMessage = new EventBase {
                        Message = TransactionResult.None
                    };
                    AfterDelete.Invoke(entity, Context, eventMessage);
                    if (eventMessage.Message != TransactionResult.None)
                    {
                        return(eventMessage.Message);
                    }
                }
                return(TransactionResult.DeleteSuccess);
            }
            catch (Exception ex)
            {
                HandleException(ex);
                scope.Dispose();
                Context.Database.Connection.Close();
                //Logger.LogSystemError(_user.UserId.ToString(), ex);
                return(TransactionResult.DeleteFailed);
            }
            finally
            {
                scope.Dispose();
            }
        }
Ejemplo n.º 2
0
        public virtual TransactionResult Save(T entity, bool edit, string headerkeyvalue = null, bool useLog = true)
        {
            if (Context.Database.Connection.State != ConnectionState.Open)
            {
                Context.Database.Connection.Open();
            }

            TransactionScope scope = new TransactionScope();

            try
            {
                T o;
                if (Exists(entity))
                {
                    if (!edit)
                    {
                        return(TransactionResult.IsExists);
                    }
                    o = Find(entity);

                    if (entity.GetType().GetProperties().Any(p => p.Name.Equals("CreatedBy", StringComparison.OrdinalIgnoreCase)))
                    {
                        entity.SetValue("CreatedBy", o.GetValue("CreatedBy"));
                        entity.SetValue("CreatedAt", o.GetValue("CreatedAt"));
                        entity.SetValue("UpdatedBy", o.GetValue("UpdatedBy"));
                        entity.SetValue("UpdatedAt", o.GetValue("UpdatedAt"));
                    }

                    Context.Entry(o).CurrentValues.SetValues(entity);

                    if (Context.Entry(o).State == EntityState.Modified && entity.GetType().GetProperties().Any(p => p.Name.Equals("UpdatedBy", StringComparison.OrdinalIgnoreCase)))
                    {
                        //o.SetValue("UpdatedBy", _user.UserId.ToInt());
                        o.SetValue("UpdatedAt", DateTime.Now);
                    }
                }
                else
                {
                    if (entity.GetType().GetProperties().Any(p => p.Name.Equals("CreatedBy", StringComparison.OrdinalIgnoreCase)))
                    {
                        //entity.SetValue("CreatedBy", _user.UserId.ToInt());
                        entity.SetValue("CreatedAt", DateTime.Now);
                    }
                    Context.Entry(entity).State = EntityState.Added;
                    o = entity;
                }
                if (BeforeSave != null)
                {
                    var eventUseData = new EventUseData();
                    BeforeSave.Invoke(o, Context, eventUseData);
                    if (eventUseData.Cancel)
                    {
                        scope.Dispose();
                        return(eventUseData.Message);
                    }
                }
                //if (_user.FollowUp && useLog)
                //{
                //    Context.LogEntity(o, _user, GetKeys[0], _formType, headerkeyvalue, headerkeyvalue);
                //}
                Context.SaveChanges();
                scope.Complete();
                if (AfterSave != null)
                {
                    var eventMessage = new EventBase {
                        Message = TransactionResult.None
                    };
                    AfterSave.Invoke(o, Context, eventMessage);
                    if (eventMessage.Message != TransactionResult.None)
                    {
                        return(eventMessage.Message);
                    }
                }

                return(TransactionResult.SaveSuccess);
            }
            catch (Exception ex)
            {
                HandleException(ex);
                scope.Dispose();
                Context.Database.Connection.Close();
                //Logger.LogSystemError(_user.UserId.ToString(), ex);
                return(TransactionResult.SaveFailed);
            }
            finally
            {
                scope.Dispose();
            }
        }