/// <summary>
        /// Ensures the current user exists in the user table, and checks all other users for updates
        /// </summary>
        /// <param name="db"></param>
        /// <param name="currUser"></param>
        /// <param name="app"></param>
        public static void SyncUsers(this DataWorkspace db, Microsoft.LightSwitch.Security.IUser currUser, Application app = null)
        {
            if (app == null)
            {
                app = LightSwitchApplication.Application.Current;
            }

            //TODO: make it more efficient - seems to be a lot of Linq methods missing, like "Contains"..
            var secUserIds = new List<string>();
            var appUserIds = new List<string>();

            foreach (var currItem in db.SecurityData.UserRegistrations)
            {
                var userItem = currItem as UserRegistration;
                secUserIds.Add(userItem.UserName);
            }

            foreach (var currItem in db.ApplicationData.Users)
            {
                var userItem = currItem as User;
                appUserIds.Add(userItem.LoginId);
            }

            var missingIds = secUserIds.Where(_ => !appUserIds.Contains(_, StringComparer.InvariantCultureIgnoreCase));

            foreach (var currMissingUserId in missingIds)
            {
                //not sure why this line doesn't work:
                //var secUser = db.SecurityData.UserRegistrations.Where(_ => _.UserName.Equals(currMissingUserId.ToString(), StringComparison.InvariantCultureIgnoreCase)).Single();

                var secUser = (from UserRegistration _ in db.SecurityData.UserRegistrations
                               where _.UserName.Equals(currMissingUserId.ToString(), StringComparison.InvariantCultureIgnoreCase)
                               select _).Single();
                var newAppUser = db.ApplicationData.Users.AddNew();
                newAppUser.LoginId = secUser.UserName;
                newAppUser.FullName = secUser.FullName;
            }

            //Ensure the current user is there, and that there name is up to date
            var existing = db.GetCurrentUser(app);
            if (existing == null)
            {
                existing = db.ApplicationData.Users.AddNew();
                existing.LoginId = currUser.Name;
                existing.FullName = currUser.FullName;
            }
            else
            {
                existing.FullName = currUser.FullName;
            }
            db.ApplicationData.SaveChanges();
        }
        /// <summary>
        /// Gets the current User's entity
        /// </summary>
        /// <param name="db"></param>
        /// <returns></returns>
        public static User GetCurrentUser(this DataWorkspace db, Application app = null)
        {
            if (app == null)
            {
                app = LightSwitchApplication.Application.Current;
            }

            var currentUserName = app.User.Name;
            User item = (from User i in db.ApplicationData.Users
                         where i.LoginId.Equals(currentUserName, StringComparison.InvariantCultureIgnoreCase)
                         select i).SingleOrDefault();
            return item;
        }