sincronização baseada em partição - .NET SDK
Nesta página
- Valor da partição
- Abra um domínio de sincronização baseado em partição enquanto estiver online
- Abra um Realm de sincronização baseada em partição enquanto estiver offline
- Migrar da sincronização baseada em partição para a Flexible Sync
- Atualizando o código do cliente após a migração
- Migrar de domínios não sincronizados para domínios sincronizados
A sincronização baseada em partição é um modo mais antigo de usar o Atlas Device Sync com o Realm .NET SDK. Recomendamos usar o Flexible Sync para novos aplicativos. As informações nesta página são para usuários que ainda estão usando a sincronização baseada em partições.
Dica
O Realm .NET SDK v11.1.0 e mais recente oferece suporte à capacidade de migrar da sincronização baseada em partição para a Flexible Sync. Para obter mais informações, consulte: Migrar da sincronização baseada em partição para a Flexible Sync. Recomendamos que você migre seus aplicativos antigos de sincronização baseada em partição para usar o Flexible Sync.
Valor da partição
Quando você seleciona sincronização baseada em partição para a configuração do aplicativo de backend, a implementação do cliente deve incluir um valor da partição}. Esse é o valor do campo da chave da partição que você seleciona ao configurar a sincronização baseada em partição.
O valor da partição determina quais dados o aplicativo cliente pode acessar. Você passa no valor da partição quando abre um Realm sincronizado.
Abra um domínio de sincronização baseado em partição enquanto estiver online
As etapas para abrir um Realm sincronizado enquanto estiver online são:
O código do seu aplicativo orienta o usuário na autenticação.
Crie um objeto PartitionSyncConfiguration que inclua o valor da partição e o objeto de usuário .
Abra um Realm sincronizado chamando o método GetInstanceAsync() , passando no objeto
PartitionSyncConfiguration
.
O seguinte código demonstra estas etapas:
user = await app.LogInAsync( Credentials.EmailPassword("caleb@mongodb.com", "MySekritPwd")); config = new PartitionSyncConfiguration("myPart", user); try { realm = await Realm.GetInstanceAsync(config); } catch (Exception ex) { Console.WriteLine($@"Error creating or opening the realm file. {ex.Message}"); }
No exemplo acima, o código mostra como abrir o domínio de forma assíncrona chamando GetInstanceAsync()
. Você também pode abrir um domínio de forma síncrona chamando o método GetInstance() :
var synchronousRealm = Realm.GetInstance(config);
Abra um Realm de sincronização baseada em partição enquanto estiver offline
Após o usuário autenticar, o objeto User
persiste no dispositivo até que o usuário faça logout. Isso permite que seu aplicativo recupere um usuário existente e abra um Realm sincronizado em um estado offline. As alterações que ocorrem enquanto estiver offline serão sincronizadas pelo SDK assim que o dispositivo for reconectado ao seu aplicativo.
O código a seguir mostra como verificar se há um objeto User
existente. Se nenhum for encontrado, ele usará o processo descrito sobre para obter um usuário. If the device already has a user
, it opens the synced realm with that user:
if (app.CurrentUser == null) { // App must be online for user to authenticate user = await app.LogInAsync( Credentials.EmailPassword("caleb@mongodb.com", "MySekritPwd")); config = new PartitionSyncConfiguration("_part", user); realm = await Realm.GetInstanceAsync(config); } else { // This works whether online or offline user = app.CurrentUser; config = new PartitionSyncConfiguration("_part", user); realm = Realm.GetInstance(config); }
Migrar da sincronização baseada em partição para a Flexible Sync
Você pode migrar seu Realm Mobile Sync do App Services da sincronização baseada em partição para a Flexible Sync. A migração é um processo automático que não exige alterações no código do aplicativo. A migração automática requer o Realm .NET SDK versão 11.1.0 ou mais recente.
A migração permite que você mantenha os usuários existentes do App Services e a configuração de autenticação. O Flexible Sync fornece opções de configuração de permissões mais versáteis e sincronização de dados mais granular.
Para obter mais informações sobre como migrar seu aplicativo do App Services App da Partition-Based Sync para o Flexible Sync, consulte Migrar modos de Device Sync .
Atualizando o código do cliente após a migração
A migração automática da sincronização baseada em partição para a Flexible Sync não exige nenhuma alteração no código do cliente. No entanto, para suportar essa funcionalidade, o Realm lida automaticamente com as diferenças entre os dois modos de sincronização por:
Criando automaticamente assinaturas de Flexible Sync para cada Tipo de objeto de Realm em que
partitionKey == partitionValue
.Injetando um campo
partitionKey
em cada objeto, se ainda não existir um. Isso é necessário para a assinatura automática do Flexible Sync.
Se você precisar fazer atualizações no código do cliente após a migração, considere atualizar a base de código do cliente para remover a funcionalidade de migração oculta. Talvez você queira atualizar a base de código do cliente quando:
Você adiciona um novo modelo ou altera um modelo na base de código do cliente
Você adiciona ou altera funcionalidades que envolvem a leitura ou escrita de Objeto de Realm
Você deseja implementar um controle mais refinado sobre quais dados você sincroniza
Faça essas alterações para converter seu código de cliente de sincronização baseada em partição para usar o Flexible Sync:
Altere sua PartitionSyncConfiguration para uma FlexibleSyncConfiguration.
Adicione propriedades relevantes aos seus modelos de objetos para usar em suas assinaturas do Flexible Sync. Por exemplo, você pode adicionar uma propriedade
ownerId
para permitir que um usuário sincronize somente seus próprios dados.Remova as assinaturas automáticas do Flexible Sync e crie manualmente as assinaturas relevantes.
Para obter exemplos de estratégias de permissões de Flexible Sync , incluindo exemplos de como modelar dados para essas estratégias, consulte o Guia de permissões de Device Sync .
Remover e criar assinaturas manualmente
Quando você migra da sincronização baseada em partição para o Flexible Sync, o Realm cria automaticamente assinaturas ocultas do Flexible Sync para seu aplicativo. Da próxima vez que adicionar ou alterar subscrições, recomendamos que você:
Isso permite que você veja toda a sua lógica de assinatura junto em sua base de código para futura iteração e depuração.
Para obter mais informações sobre as assinaturas Flexible Sync geradas automaticamente, consulte Migrar aplicativo cliente para Flexible Sync.
Migrar de domínios não sincronizados para domínios sincronizados
Você pode converter um Realm não sincronizado em um Realm sincronizado (com sincronização baseada em partição). Para converter de um Realm não sincronizado para um que usa sincronização baseada em partição, faça o seguinte:
Abra o Realm existente.
Crie uma configuração para um novo Realm.
Ligue para o método WriteCopy() no Realm existente para copiar os dados para o novo Realm.
No código a seguir, abrimos um Realm não sincronizado, criamos um novo objeto PartitionSyncConfiguration e, em seguida, copiamos o Realm existente para o novo Realm. Em seguida, excluímos o Realm existente e abrimos o novo Realm.
var existingConfig = new RealmConfiguration("example.realm"); var existingRealm = Realm.GetInstance(existingConfig); var app = App.Create("my-app-id"); var user = await app.LogInAsync( Credentials.EmailPassword("email@example.com", "password")); var syncConfig = new PartitionSyncConfiguration("user_partition", user); existingRealm.WriteCopy(syncConfig); // You can now delete the nonsynced realm: Realm.DeleteRealm(existingConfig); // You can now use the synced realm: var syncedRealm = Realm.GetInstance(syncConfig);
Observação
Somente sincronização baseada em partição
Esse método oferece suporte apenas à conversão entre um realm não sincronizado e a sincronização baseada em partição. Se seu aplicativo usa a Flexible Sync, você deve iterar manualmente pelos objetos em um território e copiá-los para o outro realm.