public GroupCollection SaveGroupCollection(GroupCollection groupCollection) { using (var context = new Data.CoreContext()) { GroupCollection oldGroupCollection = GetGroupCollection(groupCollection.GroupCollectionUId); List <GroupCollection_Group> removedGroups = new List <GroupCollection_Group>(); List <GroupCollection_Group> addedGroups = groupCollection.CollectionGroups.ToList(); if (oldGroupCollection == null) { context.GroupCollections.Add(groupCollection); } else { removedGroups = oldGroupCollection.CollectionGroups.Where(o => !groupCollection.CollectionGroups.Any(u => u.UserGroupUId == o.UserGroupUId)).ToList(); addedGroups = groupCollection.CollectionGroups.Where(u => !oldGroupCollection.CollectionGroups.Any(o => o.UserGroupUId == u.UserGroupUId)).ToList(); context.GroupCollections.Attach(oldGroupCollection); context.Entry <GroupCollection>(oldGroupCollection).CurrentValues.SetValues(groupCollection); } foreach (GroupCollection_Group m in removedGroups) { context.GroupCollection_Groups.Remove(m); } foreach (GroupCollection_Group m in addedGroups) { m.GroupCollectionUId = groupCollection.GroupCollectionUId; context.GroupCollection_Groups.Add(m); } context.SaveChanges(); return(groupCollection); } }
public User SaveUser(User user) { using (var context = new Data.CoreContext()) { CheckUniqueLoginNT(user); // gets the old version of user User oldUser = GetUser(user.Email); List <GroupMembership> removedGroups = new List <GroupMembership>(); List <GroupMembership> addedGroups = user.Memberships.ToList(); List <GroupCollectionMembership> removedGroupCollection = new List <GroupCollectionMembership>(); List <GroupCollectionMembership> addedGroupCollection = user.GroupCollectionMemberships.ToList(); if (user.Password != null) { user.Password.Password = Crypt(user.Password.Password); user.Password.Email = user.Email; } if (String.IsNullOrWhiteSpace(user.LoginNT)) { user.LoginNT = null; } user.LoginErrorsCount = 0; if (oldUser != null) { //Groups removedGroups = oldUser.Memberships.Where(o => !user.Memberships.Any(u => u.UserGroupUId == o.UserGroupUId)).ToList(); addedGroups = user.Memberships.Where(u => !oldUser.Memberships.Any(o => o.UserGroupUId == u.UserGroupUId)).ToList(); //GroupsCollection removedGroupCollection = oldUser.GroupCollectionMemberships.Where(o => !user.GroupCollectionMemberships.Any(u => u.GroupCollectionUId == o.GroupCollectionUId)).ToList(); addedGroupCollection = user.GroupCollectionMemberships.Where(u => !oldUser.GroupCollectionMemberships.Any(o => o.GroupCollectionUId == u.GroupCollectionUId)).ToList(); context.Users.Attach(oldUser); context.Entry <User>(oldUser).CurrentValues.SetValues(user); // if the password was changed if (oldUser.Password != null && user.Password != null) { oldUser.Password.Password = user.Password.Password; } // ig it has no password before, and now it was added if (oldUser.Password == null && user.Password != null) { context.UserPasswords.Add(user.Password); } } else { context.Users.Add(user); } foreach (GroupMembership m in removedGroups) { context.GroupMemberships.Remove(m); } foreach (GroupMembership m in addedGroups) { m.Email = user.Email; context.GroupMemberships.Add(m); } foreach (GroupCollectionMembership m in removedGroupCollection) { context.GroupCollectionMemberships.Remove(m); } foreach (GroupCollectionMembership m in addedGroupCollection) { m.Email = user.Email; context.GroupCollectionMemberships.Add(m); } context.SaveChanges(); } return(user); }