public bool OnRemoveAfter <T>(IEntityRequestContext context, T entity) where T : class, IEntityIdentity { var info = EntityInfoManager.GetInfo(entity); AuditManager.LogRemove(context.Who, IdentityManager.GetClientMachine(context.Who), info.Module, entity._key, null, null, entity, context.TransactionUID); return(true); }
public virtual T Get(IEntityRequestContext context, string key) { var entity = _container.GetInstance <T>(); entity._key = key; return(Get(context, entity)); }
public bool OnModifyAfter <T>(IEntityRequestContext context, T before, T after) where T : class, IEntityIdentity { var info = EntityInfoManager.GetInfo(before); AuditManager.LogModify(context.Who, IdentityManager.GetClientMachine(context.Who), info.Module, before._key, null, null, before, after, context.TransactionUID); return(true); }
public virtual T Get(IEntityRequestContext context, IEntityIdentity entity) { using (Logger.CreateTrace(LoggingBoundaries.ServiceBoundary, typeof(EntityBusinessFacade <T>), "Get")) { try { if (!context.IgnoreHandlers.HasFlag(EntityEventType.GetBefore) && !_handlers.OnGetBefore(context, entity)) { return(null); } var item = _repository.Get(context, entity as T); if (!context.IgnoreHandlers.HasFlag(EntityEventType.GetAfter) && !_handlers.OnGetAfter(context, item)) { return(null); } return(item); } catch (Exception ex) { if (Logger.HandleException(LoggingBoundaries.ServiceBoundary, ex)) { throw; } } } return(null); }
public T Get(IEntityRequestContext context, T entity) { using (var database = SqlQuery.GetConnection(_info.Module, EntityOperationType.Get, null, null, context)) { Debug.Assert(database != null); return(SqlQuery.Get <T>(_container, context, EntityInfoManager.GetInfo(entity), entity._key, database)); } }
public virtual void Save(IEntityRequestContext context, IEntityIdentity entity) { using (Logger.CreateTrace(LoggingBoundaries.ServiceBoundary, typeof(EntityBusinessFacade <T>), "Save")) { var first = context.Operations.Count == 0; try { var before = _repository.Get(context, entity as T); if (before == null) { if (!context.IgnoreHandlers.HasFlag(EntityEventType.AddBefore) && !_handlers.OnAddBefore(context, entity)) { throw new Exception("OnAddBefore handler rejected"); } _repository.Add(context, entity as T); if (!context.IgnoreHandlers.HasFlag(EntityEventType.AddAfter) && !_handlers.OnAddAfter(context, entity)) { throw new Exception("OnAddAfter handler rejected"); } } else { if (!context.IgnoreHandlers.HasFlag(EntityEventType.ModifyBefore) && !_handlers.OnModifyBefore(context, before, entity)) { throw new Exception("OnModifyBefore handler rejected"); } _repository.Modify(context, before, entity as T); if (!context.IgnoreHandlers.HasFlag(EntityEventType.ModifyAfter) && !_handlers.OnModifyAfter(context, before, entity)) { throw new Exception("OnModifyAfter handler rejected"); } } } catch (Exception ex) { context.Rollback(); if (Logger.HandleException(LoggingBoundaries.ServiceBoundary, ex)) { throw; } } finally { if (first) { context.Commit(); } } } }
public bool OnRemoveBefore <T>(IEntityRequestContext context, T entity) where T : class, IEntityIdentity { var info = EntityInfoManager.GetInfo(entity); if (!AuthorizationHelper.CanRemove(context.Who, info)) { AuditManager.LogAccess(context.Who, IdentityManager.GetClientMachine(context.Who), info.Module, entity._key, null, null, entity, context.TransactionUID); throw new UnauthorizedAccessException(); } return(true); }
public bool OnGetPagedBefore <T>(IEntityRequestContext context) where T : class, IEntityIdentity { var info = EntityInfoManager.GetInfo(typeof(T)); if (!AuthorizationHelper.CanView(context.Who, info)) { AuditManager.LogChange <T>(context.Who, info.Module, info.Entity, null, null, null, "ACC", null, null, context.TransactionUID); throw new UnauthorizedAccessException(); } return(true); }
public void Remove(IEntityRequestContext context, T entity) { using (var database = SqlQuery.GetConnection(_info.Module, EntityOperationType.Remove, entity, null, context)) { Debug.Assert(database != null); using (var command = database.CreateStoredProcCommand(_info.Module, $"usp_{_info.Entity}Remove")) { BuildCommand(context, entity, command, false); command.ExecuteNonQuery(); } } }
public void Modify(IEntityRequestContext context, T before, T after) { using (var database = SqlQuery.GetConnection(_info.Module, EntityOperationType.Modify, before, after, context)) { Debug.Assert(database != null); using (var command = database.CreateStoredProcCommand(_info.Module, $"usp_{_info.Entity}Modify")) { BuildCommand(context, after, command, false); command.ExecuteNonQuery(); } } }
public IEnumerable <T> GetPaged(IEntityRequestContext context, int skip, ref int count, bool retCount, string filterBy, string orderBy) { using (var database = SqlQuery.GetConnection(_info.Module, EntityOperationType.Get, null, null, context)) { Debug.Assert(database != null); var list = new List <T>(); var entityList = SqlQuery.GetPaged <T>(_container, context, _info, skip, ref count, retCount, filterBy, orderBy, database); foreach (var entity in entityList) { list.Add(entity); } return(list); } }
public bool OnModifyBefore <T>(IEntityRequestContext context, T before, T after) where T : class, IEntityIdentity { var retValue = true; var info = EntityInfoManager.GetInfo(before); var handlers = _producers[EntityEventType.ModifyBefore]; var allTypes = handlers.ContainsKey(ALL_CLASSES); var targetTypes = handlers.ContainsKey(info.Name); if (!allTypes && !targetTypes) { return(true); } if (allTypes) { foreach (var handler in handlers[ALL_CLASSES]) { if (!handler.OnModifyBefore(context, before, after)) { retValue = false; } } } if (targetTypes) { foreach (var handler in handlers[info.Name]) { if (!handler.OnModifyBefore(context, before, after)) { retValue = false; } } } return(retValue); }
public IEnumerable <T> OnGetPagedAfter <T>(IEntityRequestContext context, IEnumerable <T> list) where T : class, IEntityIdentity { var info = EntityInfoManager.GetInfo(typeof(T)); var handlers = _producers[EntityEventType.GetPagedAfter]; var allTypes = handlers.ContainsKey(ALL_CLASSES); var targetTypes = handlers.ContainsKey(info.Name); if (!allTypes && !targetTypes) { return(list); } if (targetTypes) { foreach (var handler in handlers[info.Name]) { list = handler.OnGetPagedAfter(context, list); if (list == null) { return(null); } } } if (allTypes) { foreach (var handler in handlers[ALL_CLASSES]) { list = handler.OnGetPagedAfter(context, list); if (list == null) { return(null); } } } return(list); }
public void BuildCommand(IEntityRequestContext context, T entity, IDbCommand command, bool addRecord) { Debug.Assert(command != null); var properties = _info.Properties; //EntityInfoManager.Map<T>(_info); foreach (var property in properties) { var prop = property.Value; var value = prop.Get.DynamicInvoke(entity); if (value == null) { continue; } if (prop.Type == "json") { value = JsonConvert.SerializeObject(value); } if (value is DateTime) { value = (value as DateTime?).ToDB(); } if (addRecord && prop.IsIdentity.HasValue && prop.IsIdentity.Value) { command.AddParameter("@" + prop.Name, ParameterDirection.InputOutput, value); } else { command.AddInParameter("@" + prop.Name, value); } } }
public virtual IEnumerable <T> GetPaged(IEntityRequestContext context, int skip, ref int count, bool retCount, string filterBy, string orderBy) { using (Logger.CreateTrace(LoggingBoundaries.ServiceBoundary, typeof(EntityBusinessFacade <T>), "GetPaged")) { try { if (count < 0) { count = 5000; } if (!context.IgnoreHandlers.HasFlag(EntityEventType.GetPagedBefore) && !_handlers.OnGetPagedBefore <T>(context)) { return(null); } var list = _repository.GetPaged(context, skip, ref count, retCount, filterBy, orderBy); if (!context.IgnoreHandlers.HasFlag(EntityEventType.GetPagedAfter)) { list = _handlers.OnGetPagedAfter(context, list); } return(list); } catch (Exception ex) { if (Logger.HandleException(LoggingBoundaries.ServiceBoundary, ex)) { throw; } } } return(null); }
public bool OnGetPagedBefore <T>(IEntityRequestContext context) where T : class, IEntityIdentity { throw new NotImplementedException(); }
public bool OnModifyAfter <T>(IEntityRequestContext context, T before, T after) where T : class, IEntityIdentity { throw new NotImplementedException(); }
public bool OnGetAfter <T>(IEntityRequestContext context, T entity) where T : class, IEntityIdentity { throw new NotImplementedException(); }
public bool OnModifyBefore <T>(IEntityRequestContext context, T before, T after) where T : class, IEntityIdentity { throw new UnauthorizedAccessException(); }
public static T Get <T>(Container container, IEntityRequestContext context, IEntityInfo info, string primaryKey, IDBConnection database) where T : class, IEntityIdentity { using (Logger.CreateTrace(LoggingBoundaries.ServiceBoundary, typeof(SqlQuery), "Get")) { try { var view = $"[{info.Module}].[VW_{info.Entity.ToUpperInvariant()}]"; var keyValues = primaryKey.Split('|').ToList(); var keys = new List <string>(); var parameters = new List <DbParameter>(); var idx = 0; foreach (var property in info.Properties) { idx++; var val = property.Value; if (!val.IsKey.HasValue || (val.IsKey.HasValue && !val.IsKey.Value)) { continue; } keys.Add($"{property.Key} = @val{idx}"); parameters.Add(database.CreateParameter($"@val{idx}", keyValues[0])); } var where = string.Join(" AND ", keys); using (database) { var command = database.CreateCommand($"SELECT * FROM {view} WHERE {where}", CommandType.Text); foreach (var parameter in parameters) { command.AddParameter(parameter); } var entity = new Entity(); var factory = container.GetInstance <IEntityCreateFactory>(); T item = factory.CreateNew(info) as T; command.ExecuteReader(dataReader => { if (!PopulateEntity(item, info, dataReader, true)) { item = null; } }); return(item); } } catch (Exception ex) { if (Logger.HandleException(LoggingBoundaries.ServiceBoundary, ex)) { throw; } } } return(null); }
public bool OnRemoveBefore <T>(IEntityRequestContext context, T entity) where T : class, IEntityIdentity { throw new NotImplementedException(); }
public IEnumerable <T> OnGetPagedAfter <T>(IEntityRequestContext context, IEnumerable <T> list) where T : class, IEntityIdentity { throw new NotImplementedException(); }
public static IDBConnection GetConnection(string dbCode, EntityOperationType type, IEntityIdentity before, IEntityIdentity after, IEntityRequestContext context) { dbCode = DataConfig.Current.GetConnectionName(dbCode); IDBConnection connection = null; foreach (var operation in context.Operations) { var sqlOperation = operation as SqlOperation; if (sqlOperation == null) { continue; } if (sqlOperation.DbCode == dbCode) { connection = sqlOperation.Connection; } } if (connection == null && context.Who != null) { connection = DatabaseFactory.CreateDatabase(dbCode).AddClaimsDefaults(context.Who); } if (connection == null) { connection = DatabaseFactory.CreateDatabase(dbCode); } if (type != EntityOperationType.Get) { if (!connection.IsInTransaction) { connection.BeginTrans(); } context.Operations.Add(new SqlOperation { DbCode = dbCode, Type = type, Before = before, After = after, Connection = connection }); } return(connection); }
public bool OnAddBefore <T>(IEntityRequestContext context, T entity) where T : class, IEntityIdentity { throw new UnauthorizedAccessException(); }
public static IEnumerable <T> GetPaged <T>(Container container, IEntityRequestContext context, IEntityInfo info, int skip, ref int count, bool retCount, string filterBy, string orderBy, IDBConnection database) where T : class, IEntityIdentity { using (Logger.CreateTrace(LoggingBoundaries.ServiceBoundary, typeof(SqlQuery), "GetPaged")) { try { var view = $"[{info.Module}].[VW_{info.Entity}]"; List <T> list = new List <T>(); using (var command = database.CreateStoredProcCommand("common", "usp_EntityGetByFilter")) { string where = null; if (!string.IsNullOrEmpty(filterBy)) { where = OData3FilterBuilder.ParseExpression(command, filterBy, info.Properties.Keys.ToArray()); } command.AddInParameter("@view", view); command.AddInParameter("@skip", skip); command.AddInParameter("@retCount", retCount); if (!string.IsNullOrEmpty(where)) { command.AddInParameter("@where", where); } if (!string.IsNullOrEmpty(orderBy)) { command.AddInParameter("@orderBy", orderBy.Replace(", ", ",").Replace(" ", "_")); } command.AddParameter("@count", ParameterDirection.InputOutput, count); command.AddOutParameter("@debug", ""); var entity = new Entity(); var factory = container.GetInstance <IEntityCreateFactory>(); command.ExecuteReader(dataReader => { T item = factory.CreateNew(info) as T; while (PopulateEntity(item, info, dataReader, true)) { list.Add(item); item = factory.CreateNew(info) as T; } }); Logger.LogTrace(LoggingBoundaries.Database, "DYNAMIC SQL EXECUTED: {0}", command.GetOutParameter("@debug").Value.ToString()); if (retCount) { count = int.Parse(command.GetOutParameter("@count").Value.ToString()); } } return(list); } catch (Exception ex) { if (Logger.HandleException(LoggingBoundaries.ServiceBoundary, ex)) { throw; } } } return(null); }