Beispiel #1
0
        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));
        }
Beispiel #2
0
        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));
        }