public void VerifyAndMerge()
        {
            var dbManager  = new DatabaseManager();
            var database   = dbManager.GetDatabase();
            var collection = database.GetCollection <IUser>(typeof(IUser).Name);
            var config     = (MapUserConfiguration)ConfigurationManager.GetSection("databasemap");

            foreach (UserMap user in config.Users)
            {
                var names = user.SubNames.Split(',');
                foreach (var name in names)
                {
                    var   query   = Query.EQ("Name", name);
                    IUser subUser = collection.FindOne(query);
                    if (subUser != null)
                    {
                        query = Query.EQ("Name", user.MainName);
                        IUser mainUser = collection.FindOne(query);
                        if (mainUser == null)
                        {
                            subUser.Name = user.MainName;
                            mainUser     = subUser;
                        }
                        else
                        {
                            foreach (var key in subUser.ExtensionPoint.Keys)
                            {
                                IExtension value = null;
                                if (mainUser.ExtensionPoint.TryGetValue(key, out value))
                                {
                                    var merge = value.Merge(subUser.ExtensionPoint[key]);
                                    mainUser.ExtensionPoint[key] = merge;
                                }
                                else
                                {
                                    mainUser.ExtensionPoint.Add(key, subUser.ExtensionPoint[key]);
                                }
                            }
                        }
                        dbManager.Delete <IUser>(subUser.Id);
                        dbManager.Update <IUser>(mainUser);
                    }
                }
            }
        }
        public void LoadBadges()
        {
            var type   = typeof(IBadge);
            var badges = AppDomain.CurrentDomain.GetAssemblies()
                         .SelectMany(s => s.GetTypes())
                         .Where(p => type.IsAssignableFrom(p) && p.IsClass);

            var db         = new DatabaseAccess.DatabaseManager();
            var collection =
                db.GetDatabase().GetCollection <IBadge>(typeof(IBadge).Name);

            foreach (var badge in badges)
            {
                var query = Query.EQ("_t", badge.Name);
                var b     = collection.FindOne(query);
                if (b == null)
                {
                    b = (IBadge)Activator.CreateInstance(Type.GetType(badge.FullName));
                    db.Insert <IBadge>(b);
                }
            }
        }
        public void LoadBadges()
        {
            log.Info("Loading badges");
            var type = typeof(IBadge);
            var badges = AppDomain.CurrentDomain.GetAssemblies()
                .SelectMany(s => s.GetTypes())
                .Where(p => type.IsAssignableFrom(p) && p.IsClass);

            var db = new DatabaseAccess.DatabaseManager();
            var collection =
                db.GetDatabase().GetCollection<IBadge>(typeof(IBadge).Name);
            foreach (var badge in badges)
            {                              
                var query = Query.EQ("_t", badge.Name);
                var b = collection.FindOne(query);
                if (b == null)
                {                
                    b = (IBadge)Activator.CreateInstance(Type.GetType(badge.FullName));
                    db.Insert<IBadge>(b);
                }                
            }
                
        }