public void Synchronize() { if (_communicationService != null) { CommunicationContactPart master = _communicationService.EnsureMasterContact(); _transactionManager.RequireNew(); // assegna un contact a ogni device int idmaster = master.Id; var notificationrecords = _pushNotificationRepository.Fetch(x => x.Produzione && x.Validated).ToList(); foreach (PushNotificationRecord rec in notificationrecords) { rec.MobileContactPartRecord_Id = EnsureContactId(rec.UUIdentifier, idmaster); _pushNotificationRepository.Update(rec); _transactionManager.RequireNew(); } _pushNotificationRepository.Flush(); _notifier.Add(NotifyType.Information, T("Linked {0} device To Master contact", notificationrecords.Count().ToString())); string message = string.Format("Linked {0} device To Master contact", notificationrecords.Count().ToString()); Logger.Log(OrchardLogging.LogLevel.Information, null, message, null); _transactionManager.RequireNew(); // elimina gli userDevice riferiti a utenti inesistenti (perché cancellati) UserPart user = null; List <UserDeviceRecord> elencoUdr = _userDeviceRecord.Fetch(x => x.UserPartRecord.Id > 0).ToList(); foreach (UserDeviceRecord udr in elencoUdr) { user = _orchardServices.ContentManager.Get <UserPart>(udr.UserPartRecord.Id); if (user == null) { _userDeviceRecord.Delete(udr); _transactionManager.RequireNew(); } } _userDeviceRecord.Flush(); _transactionManager.RequireNew(); // elimina gli userDevice duplicati (con lo stesso UUIdentifier) e tiene il più recente (in base all'Id del record) string uuidPrecedente = ""; elencoUdr = _userDeviceRecord.Fetch(x => x.UUIdentifier != null).OrderBy(y => y.UUIdentifier).OrderByDescending(z => z.Id).ToList(); foreach (UserDeviceRecord udr in elencoUdr) { if (udr.UUIdentifier == uuidPrecedente) { _userDeviceRecord.Delete(udr); _transactionManager.RequireNew(); } else { uuidPrecedente = udr.UUIdentifier; } } _userDeviceRecord.Flush(); _transactionManager.RequireNew(); } }