public static Function Create(IFunctionCreateIo input) { Debug.Assert(input.Id != null, "input.Id != null"); return(new Function(input.Id.Value) { Code = input.Code, Description = input.Description, IsEnabled = input.IsEnabled, DeveloperId = input.DeveloperId, ResourceTypeId = input.ResourceTypeId, SortCode = input.SortCode, IsManaged = input.IsManaged }); }
public static Function Create(IFunctionCreateIo input) { Debug.Assert(input.Id != null, "input.Id != null"); return new Function { Id = input.Id.Value, Code = input.Code, Description = input.Description, IsEnabled = input.IsEnabled, DeveloperId = input.DeveloperId, ResourceTypeId = input.ResourceTypeId, SortCode = input.SortCode, IsManaged = input.IsManaged }; }
private void Handle(IAcSession acSession, IFunctionCreateIo input, bool isCommand) { var acDomain = _set._acDomain; var dicByCode = _set._dicByCode; var dicById = _set._dicById; var functionRepository = acDomain.RetrieveRequiredService <IRepository <Function> >(); if (string.IsNullOrEmpty(input.Code)) { throw new ValidationException("编码不能为空"); } if (!input.Id.HasValue) { throw new ValidationException("标识是必须的"); } CatalogState resource; if (!acDomain.CatalogSet.TryGetCatalog(input.ResourceTypeId, out resource)) { throw new ValidationException("意外的功能资源标识" + input.ResourceTypeId); } var entity = Function.Create(input); lock (Locker) { FunctionState functionState; if (acDomain.FunctionSet.TryGetFunction(input.Id.Value, out functionState)) { throw new AnycmdException("记录已经存在"); } var state = FunctionState.Create(acDomain, entity); if (acDomain.FunctionSet.TryGetFunction(resource, input.Code, out functionState)) { throw new ValidationException("重复的编码"); } if (!dicById.ContainsKey(entity.Id)) { dicById.Add(entity.Id, state); } if (!dicByCode.ContainsKey(resource)) { dicByCode.Add(resource, new Dictionary <functionCode, FunctionState>(StringComparer.OrdinalIgnoreCase)); } if (!dicByCode[resource].ContainsKey(entity.Code)) { dicByCode[resource].Add(state.Code, state); } if (isCommand) { try { functionRepository.Add(entity); functionRepository.Context.Commit(); } catch { if (dicById.ContainsKey(entity.Id)) { dicById.Remove(entity.Id); } if (dicByCode.ContainsKey(resource) && dicByCode[resource].ContainsKey(entity.Code)) { dicByCode[resource].Remove(entity.Code); } functionRepository.Context.Rollback(); throw; } } } if (isCommand) { acDomain.MessageDispatcher.DispatchMessage(new FunctionAddedEvent(acSession, entity, input) { IsPriviate = true }); } }