internal static UserGroup SaveProperties(UserGroup group) { var entities = QPContext.EFContext; var dal = MapperFacade.UserGroupMapper.GetDalObject(group); dal.LastModifiedBy = QPContext.CurrentUserId; using (new QPConnectionScope()) { dal.Created = Common.GetSqlDate(QPConnectionScope.Current.DbConnection); dal.Modified = dal.Created; } entities.Entry(dal).State = EntityState.Added; if (group.ParentGroup != null) { var parentDal = MapperFacade.UserGroupMapper.GetDalObject(group.ParentGroup); entities.UserGroupSet.Attach(parentDal); var bind = new GroupToGroupBindDAL { ParentGroup = parentDal, ChildGroup = dal }; dal.ParentGroupToGroupBinds.Add(bind); } foreach (var u in MapperFacade.UserMapper.GetDalList(group.Users.ToList())) { entities.UserSet.Attach(u); var bind = new UserUserGroupBindDAL { UserGroup = dal, User = u }; dal.UserGroupBinds.Add(bind); } entities.SaveChanges(); return(MapperFacade.UserGroupMapper.GetBizObject(dal)); }
internal static UserGroup UpdateProperties(UserGroup group) { var entities = QPContext.EFContext; var dal = MapperFacade.UserGroupMapper.GetDalObject(group); dal.LastModifiedBy = QPContext.CurrentUserId; using (new QPConnectionScope()) { dal.Modified = Common.GetSqlDate(QPConnectionScope.Current.DbConnection); } entities.Entry(dal).State = EntityState.Modified; var dalDb = entities .UserGroupSet .Include(x => x.ParentGroupToGroupBinds).ThenInclude(y => y.ParentGroup) .Include(x => x.UserGroupBinds).ThenInclude(y => y.User) .Single(g => g.Id == dal.Id); foreach (var pg in dalDb.ParentGroupToGroupBinds.ToArray()) { if (group.ParentGroup == null || pg.ParentGroup.Id != group.ParentGroup.Id) { dalDb.ParentGroupToGroupBinds.Remove(pg); } } if (group.ParentGroup != null) { if (dalDb.ParentGroups.All(g => g.Id != group.ParentGroup.Id)) { var dalParent = entities.UserGroupSet.Single(g => g.Id == group.ParentGroup.Id); entities.UserGroupSet.Attach(dalParent); var bind = new GroupToGroupBindDAL { ParentGroup = dalParent, ChildGroup = dal }; dal.ParentGroupToGroupBinds.Add(bind); } } var inmemoryUserIDs = new HashSet <decimal>(group.Users.Select(u => Converter.ToDecimal(u.Id))); var indbUserIDs = new HashSet <decimal>(dalDb.Users.Select(u => u.Id)); foreach (var u in dalDb.UserGroupBinds.ToArray()) { if (!inmemoryUserIDs.Contains(u.User.Id)) { dalDb.UserGroupBinds.Remove(u); } } foreach (var u in MapperFacade.UserMapper.GetDalList(group.Users.ToList())) { if (!indbUserIDs.Contains(u.Id)) { var bind = new UserUserGroupBindDAL { UserId = u.Id, UserGroupId = group.Id }; dal.UserGroupBinds.Add(bind); } } entities.SaveChanges(); return(MapperFacade.UserGroupMapper.GetBizObject(dal)); }