// RadioButton button List< çalışmıyor.> //Reflection ile gelen ekrandan oluşan verilerin db ye yansıltılması. public int Save(IEnumerable<RoleControllerActionEntity> list) { int ret = 0; if (!list.IsEmptyList()) { //Öncelikle Her nekadar entity de Role name olsa bile tek bir role adı olmalı. O yüzden kontrol ediyoruz. HashSet<string> roleNames = new HashSet<string>(); HashSet<ControllerType> cts = new HashSet<ControllerType>(); list.ForEach((e) => { roleNames.Add(e.RoleName); cts.Add(e.Type); }); if (roleNames.Count != 1) throw new ArgumentException("RoleActionEntity List contains more than one role"); if (cts.Count != 1) throw new ArgumentException("RoleActionEntity List contains more than one ControlType(Api or Mvc)"); using (TransactionalDbClient tc = DataFactory.CreateTransactionalDbClient()) { RoleRepository roleRepository = new RoleRepository(tc.Cmd); ControllerRepository controllerRepository = new ControllerRepository(tc.Cmd); ActionRepository actionRepository = new ActionRepository(tc.Cmd); IndexedEntityList<Role> dbRoles = new IndexedEntityList<Role>(roleRepository.Select(), r => r.Name); IndexedEntityList<Controller> dbControllers = new IndexedEntityList<Controller>(controllerRepository.Select(), a => a.Name); IndexedEntityList<Models.Action> dbActions = new IndexedEntityList<Models.Action>(actionRepository.Select(), a => a.ControllerId, a => a.Name); List<RoleAction> dbEntityList = new List<RoleAction>(list.Count()); Role dbRole = null; foreach (RoleControllerActionEntity uiEntity in list)//Storage veritabanından geldi. { // Buradayız ama. controller den gelecek check edi,lmiş contooler ve action ları RoleControllerAction tablosuna yazmak. dbRole = dbRoles.Find(uiEntity.RoleName); if (null == dbRole) { dbRole = DataFactory.CreateEntity<Role>(); dbRole.Name = uiEntity.RoleName;//Yani db de yoksa bile eğer reflection ile gelmiş ise yani eklendi ise db ye de ekle. roleRepository.Insert(dbRole); dbRoles.Add(dbRole); // yeni db ye eklenen kayıt cache lenmiş dataya ekleniyor. } //Önceklikle Controller Denetlenmeli. Controller dbController = dbControllers.Find(uiEntity.ControllerName); if (null == dbController) { dbController = DataFactory.CreateEntity<Controller>(); dbController.Name = uiEntity.ControllerName; dbController.Type = (Byte)((Int32)uiEntity.Type); controllerRepository.Insert(dbController); dbControllers.Add(dbController); } Models.Action dbControllerAction = dbActions.Find(dbController.Id, uiEntity.ActionName); if (null == dbControllerAction)//Yani db de yoksa bile eğer reflection ile gelmiş ise yani eklendi ise db ye de ekle. { dbControllerAction = DataFactory.CreateEntity<Models.Action>(); dbControllerAction.Name = uiEntity.ActionName; dbControllerAction.ControllerId = dbController.Id; actionRepository.Insert(dbControllerAction); dbActions.Add(dbControllerAction); } RoleAction dbEntity = DataFactory.CreateEntity<RoleAction>(); dbEntity.ActionId = dbControllerAction.Id; dbEntity.RoleId = dbRole.Id; dbEntity.Enabled = uiEntity.Enabled; dbEntityList.Add(dbEntity); // else cascade silinecek. } if (dbRole == null) throw new InvalidOperationException("Role can not be null"); RoleActionRepository roleActionRepository = new RoleActionRepository(tc.Cmd); //Örneğin RoleControllerAction Tablosunun hepsi Silenebilir. SqlQuery deleteQuery = @"delete rca from RoleAction rca inner join Action ca on rca.ActionId=ca.Id inner join Controller c on ca.ControllerId = c.Id where c.Type=@0 and rca.RoleId=@1".ToQuery(cts.First().Cast<int>(), dbRole.Id);//Zaten tüm elemanlar aynı ControllerType' a sahip olmak zorunda. ret += tc.DataAccess.ExecuteNonQuery(deleteQuery); ret = roleActionRepository.BatchInsert(dbEntityList); tc.Commit(); } } return ret; }
// RadioButton button List< çalışmıyor.> //Reflection ile gelen ekrandan oluşan verilerin db ye yansıltılması. public int Save(IEnumerable <RoleControllerActionEntity> list) { int ret = 0; if (!list.IsEmptyList()) { //Öncelikle Her nekadar entity de Role name olsa bile tek bir role adı olmalı. O yüzden kontrol ediyoruz. HashSet <string> roleNames = new HashSet <string>(); list.ForEach((e) => { roleNames.Add(e.RoleName); }); if (roleNames.Count != 1) { throw new ArgumentException("RoleActionEntity List contains more than one role"); } using (TransactionalDbClient tc = ionixFactory.CreateTransactionalDbClient()) { RoleRepository roleRepository = new RoleRepository(tc.Cmd); ControllerRepository controllerRepository = new ControllerRepository(tc.Cmd); ActionRepository actionRepository = new ActionRepository(tc.Cmd); IndexedEntityList <Role> dbRoles = IndexedEntityList <Role> .Create(r => r.Name); dbRoles.AddRange(roleRepository.Select()); IndexedEntityList <Controller> dbControllers = IndexedEntityList <Controller> .Create(a => a.Name); dbControllers.AddRange(controllerRepository.Select()); IndexedEntityList <Server.Models.Action> dbActions = IndexedEntityList <Server.Models.Action> .Create(a => a.ControllerId, a => a.Name); dbActions.AddRange(actionRepository.Select()); List <RoleAction> dbEntityList = new List <RoleAction>(list.Count()); Role dbRole = null; foreach (RoleControllerActionEntity uiEntity in list)//Storage veritabanından geldi. { // Buradayız ama. controller den gelecek check edi,lmiş contooler ve action ları RoleControllerAction tablosuna yazmak. dbRole = dbRoles.Find(uiEntity.RoleName); if (null == dbRole) { dbRole = ionixFactory.CreateEntity <Role>(); dbRole.Name = uiEntity.RoleName;//Yani db de yoksa bile eğer reflection ile gelmiş ise yani eklendi ise db ye de ekle. roleRepository.Insert(dbRole); dbRoles.Add(dbRole); // yeni db ye eklenen kayıt cache lenmiş dataya ekleniyor. } //Önceklikle Controller Denetlenmeli. Controller dbController = dbControllers.Find(uiEntity.ControllerName); if (null == dbController) { dbController = ionixFactory.CreateEntity <Controller>(); dbController.Name = uiEntity.ControllerName; controllerRepository.Insert(dbController); dbControllers.Add(dbController); } Server.Models.Action dbControllerAction = dbActions.Find(dbController.Id, uiEntity.ActionName); if (null == dbControllerAction)//Yani db de yoksa bile eğer reflection ile gelmiş ise yani eklendi ise db ye de ekle. { dbControllerAction = ionixFactory.CreateEntity <Server.Models.Action>(); dbControllerAction.Name = uiEntity.ActionName; dbControllerAction.ControllerId = dbController.Id; actionRepository.Insert(dbControllerAction); dbActions.Add(dbControllerAction); } RoleAction dbEntity = ionixFactory.CreateEntity <RoleAction>(); dbEntity.ActionId = dbControllerAction.Id; dbEntity.RoleId = dbRole.Id; dbEntity.Enabled = uiEntity.Enabled; dbEntityList.Add(dbEntity); // else cascade silinecek. } if (dbRole == null) { throw new InvalidOperationException("Role can not be null"); } RoleActionRepository roleActionRepository = new RoleActionRepository(tc.Cmd); //Örneğin RoleControllerAction Tablosunun hepsi Silenebilir. SqlQuery deleteQuery = @"delete from RoleAction where RoleId=@0".ToQuery(dbRole.Id); ret += tc.DataAccess.ExecuteNonQuery(deleteQuery); ret = roleActionRepository.BatchInsert(dbEntityList); tc.Commit(); } } return(ret); }