private IEnumerable <InfoRuleState> GetInfoRules() { IEnumerable <IInfoRule> validatorPlugs = null; using (var catalog = new DirectoryCatalog(Path.Combine(_acDomain.GetPluginBaseDirectory(PluginType.InfoConstraint), "Bin"))) { using (var container = new CompositionContainer(catalog)) { var infoRuleImport = new InfoRuleImport(); infoRuleImport.ImportsSatisfied += (sender, e) => { validatorPlugs = e.InfoRules; }; container.ComposeParts(infoRuleImport); } } var infoRuleRepository = _acDomain.RetrieveRequiredService <IRepository <InfoRule, Guid> >(); var oldEntities = infoRuleRepository.AsQueryable().ToList(); var deleteList = new List <InfoRule>(); var newList = new List <InfoRule>(); var infoRules = new List <InfoRuleState>(); var entities = new List <InfoRule>(); bool saveChanges = false; foreach (var item in validatorPlugs) { var entity = new InfoRule(item.Id) { IsEnabled = 0 }; var oldEntity = oldEntities.FirstOrDefault(a => a.Id == item.Id); if (oldEntity != null) { ((IEntityBase)entity).CreateBy = oldEntity.CreateBy; ((IEntityBase)entity).CreateOn = oldEntity.CreateOn; ((IEntityBase)entity).CreateUserId = oldEntity.CreateUserId; entity.IsEnabled = oldEntity.IsEnabled; ((IEntityBase)entity).ModifiedBy = oldEntity.ModifiedBy; ((IEntityBase)entity).ModifiedOn = oldEntity.ModifiedOn; ((IEntityBase)entity).ModifiedUserId = oldEntity.ModifiedUserId; } entities.Add(entity); infoRules.Add(InfoRuleState.Create(entity, item)); } // 待添加的新的 foreach (var item in entities) { var item1 = item; var old = oldEntities.FirstOrDefault(a => a.Id == item1.Id); if (old == null) { newList.Add(item); } } // 待移除的旧的 foreach (var oldEntity in oldEntities) { var item2 = oldEntity; var entity = entities.FirstOrDefault(a => a.Id == item2.Id); if (entity == null) { deleteList.Add(oldEntity); } } if (newList.Count > 0) { saveChanges = true; foreach (var item in newList) { infoRuleRepository.Context.RegisterNew(item); } } if (deleteList.Count > 0) { saveChanges = true; foreach (var item in deleteList) { infoRuleRepository.Context.RegisterDeleted(item); } } if (saveChanges) { using (var coordinator = TransactionCoordinatorFactory.Create(infoRuleRepository.Context, _acDomain.EventBus)) { coordinator.Commit(); } } return(infoRules); }
private IEnumerable<InfoRuleState> GetInfoRules() { IEnumerable<IInfoRule> validatorPlugs = null; using (var catalog = new DirectoryCatalog(Path.Combine(_acDomain.GetPluginBaseDirectory(PluginType.InfoConstraint), "Bin"))) { using (var container = new CompositionContainer(catalog)) { var infoRuleImport = new InfoRuleImport(); infoRuleImport.ImportsSatisfied += (sender, e) => { validatorPlugs = e.InfoRules; }; container.ComposeParts(infoRuleImport); } } var infoRuleRepository = _acDomain.RetrieveRequiredService<IRepository<InfoRule>>(); var oldEntities = infoRuleRepository.AsQueryable().ToList(); var deleteList = new List<InfoRule>(); var newList = new List<InfoRule>(); var infoRules = new List<InfoRuleState>(); var entities = new List<InfoRule>(); bool saveChanges = false; foreach (var item in validatorPlugs) { var entity = new InfoRule { Id = item.Id, IsEnabled = 0 }; var oldEntity = oldEntities.FirstOrDefault(a => a.Id == item.Id); if (oldEntity != null) { ((IEntityBase)entity).CreateBy = oldEntity.CreateBy; ((IEntityBase)entity).CreateOn = oldEntity.CreateOn; ((IEntityBase)entity).CreateUserId = oldEntity.CreateUserId; entity.IsEnabled = oldEntity.IsEnabled; ((IEntityBase)entity).ModifiedBy = oldEntity.ModifiedBy; ((IEntityBase)entity).ModifiedOn = oldEntity.ModifiedOn; ((IEntityBase)entity).ModifiedUserId = oldEntity.ModifiedUserId; } entities.Add(entity); infoRules.Add(InfoRuleState.Create(entity, item)); } // 待添加的新的 foreach (var item in entities) { var item1 = item; var old = oldEntities.FirstOrDefault(a => a.Id == item1.Id); if (old == null) { newList.Add(item); } } // 待移除的旧的 foreach (var oldEntity in oldEntities) { var item2 = oldEntity; var entity = entities.FirstOrDefault(a => a.Id == item2.Id); if (entity == null) { deleteList.Add(oldEntity); } } if (newList.Count > 0) { saveChanges = true; foreach (var item in newList) { infoRuleRepository.Context.RegisterNew(item); } } if (deleteList.Count > 0) { saveChanges = true; foreach (var item in deleteList) { infoRuleRepository.Context.RegisterDeleted(item); } } if (saveChanges) { using (var coordinator = TransactionCoordinatorFactory.Create(infoRuleRepository.Context, _acDomain.EventBus)) { coordinator.Commit(); } } return infoRules; }