Docs Menu
Docs Home
/ /
Sincronizar datos

Sincronización basada en particiones - SDK .NET

Partition-Based Sync es un modo más antiguo para usar Atlas Device Sync con el SDK de Realm .NET. Recomendamos usar Flexible Sync para nuevas aplicaciones. La información en esta página es para usuarios que aún utilizan Partition-Based Sync.

Tip

El SDK de Realm .NET v11.1.0 y versiones posteriores permiten migrar de la sincronización basada en particiones a la sincronización flexible. Para obtener más información, consulte: Migrar de la sincronización basada en particiones a la sincronización flexible. Recomendamos migrar las aplicaciones antiguas de sincronización basada en particiones para usar la sincronización flexible.

Cuando se selecciona Partition-Based Sync para la configuración de la aplicación de backend, la implementación del cliente debe incluir un valor de la partición. Este es el valor del campo clave de partición que se selecciona al configurar la Partition-Based Sync.

El valor de la partición determina a qué datos puede acceder la aplicación cliente. Se pasa el valor de la partición al abrir un dominio sincronizado.

Los pasos para abrir un reino sincronizado mientras estás en línea son:

  1. El código de su aplicación guía al usuario a través del proceso de autenticación.

  2. Cree un objeto PartitionSyncConfiguration que incluya el valor de la partición y el objeto Usuario.

  3. Abra un reino sincronizado llamando al método GetInstanceAsync() y pasando el PartitionSyncConfiguration objeto.

El siguiente código demuestra estos pasos:

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}");
}

En el ejemplo anterior, el código muestra cómo abrir el dominio de forma asincrónica llamando GetInstanceAsync() a. También puede abrir un dominio de forma sincrónica llamando al método GetInstance():

var synchronousRealm = Realm.GetInstance(config);

Una vez que un usuario se autentica, el User objeto permanece en el dispositivo hasta que cierra sesión. Esto permite que tu app recupere un usuario existente y abra un dominio sincronizado sin conexión. El SDK sincronizará los cambios que se produzcan sin conexión una vez que el dispositivo se vuelva a conectar a tu app.

El siguiente código muestra cómo comprobar si existe un objeto User. Si no se encuentra ninguno, se utiliza el proceso descrito anteriormente para obtener un usuario. Si el dispositivo ya tiene un user, se abre el dominio sincronizado con ese usuario:

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);
}

Puedes migrar el modo de sincronización de dispositivos de App Services de la sincronización basada en particiones a la sincronización flexible. La migración es un proceso automático que no requiere cambios en el código de la aplicación. La migración automática requiere la versión 11.1.0 o posterior del SDK de Realm .NET.

La migración le permite conservar sus usuarios y configuración de autenticación de App Services. Flexible Sync ofrece opciones de configuración de permisos más versátiles y una sincronización de datos más granular.

Para obtener más información sobre cómo migrar su aplicación de App Services de sincronización basada en particiones a sincronización flexible, consulte Migrar modos de sincronización de dispositivos.

La migración automática de la sincronización basada en particiones a la sincronización flexible no requiere cambios en el código de cliente. Sin embargo, para facilitar esta funcionalidad, Realm gestiona automáticamente las diferencias entre los dos modos de sincronización mediante:

  • Creación automática de suscripciones de sincronización flexible para cada tipo de objeto donde partitionKey == partitionValue.

  • Inyectar un campo partitionKey en cada objeto si no existe. Esto es necesario para la suscripción automática a Sincronización Flexible.

Si necesita actualizar el código de su cliente después de la migración, considere actualizar su base de código para eliminar las funciones de migración ocultas. Le recomendamos actualizar su base de código cuando:

  • Agregue un nuevo modelo o cambie un modelo en su base de código de cliente.

  • Agrega o cambia funcionalidad que implica leer o escribir objetos de Realm

  • Desea implementar un control más preciso sobre los datos que sincroniza

Realice estos cambios para convertir el código de cliente de sincronización basada en particiones para utilizar la sincronización flexible:

  • Cambia tu PartitionSyncConfiguration a una FlexibleSyncConfiguration.

  • Agregue propiedades relevantes a sus modelos de objetos para usarlas en sus suscripciones de Sincronización Flexible. Por ejemplo, podría agregar una propiedad ownerId para permitir que un usuario sincronice solo sus propios datos.

  • Elimine las suscripciones automáticas de sincronización flexible y cree manualmente las suscripciones relevantes.

Para obtener ejemplos de estrategias de permisos de sincronización flexible, incluidos ejemplos de cómo modelar datos para estas estrategias, consulte la Guía de permisos de sincronización de dispositivos.

Al migrar de la sincronización basada en particiones a la sincronización flexible, Realm crea automáticamente suscripciones ocultas de sincronización flexible para su aplicación. La próxima vez que agregue o modifique suscripciones, le recomendamos lo siguiente:

  1. Eliminar las suscripciones generadas automáticamente.

  2. Agregue manualmente las suscripciones relevantes en la base de código de su cliente.

Esto le permite ver toda su lógica de suscripción junta en su base de código para futuras iteraciones y depuraciones.

Para obtener más información sobre las suscripciones de Flexible Sync generadas automáticamente, consulte Migrar la aplicación cliente a Flexible Sync.

Puedes convertir un dominio no sincronizado en uno sincronizado (con sincronización basada en particiones). Para convertir un dominio no sincronizado en uno con sincronización basada en particiones, sigue estos pasos:

  1. Abra el reino existente.

  2. Crear una configuración para un nuevo reino.

  3. Llame al método WriteCopy() en el reino existente para copiar los datos al nuevo reino.

En el siguiente código, abrimos un dominio no sincronizado, creamos un nuevo objeto PartitionSyncConfiguration y copiamos el dominio existente al nuevo. A continuación, eliminamos el dominio existente y abrimos el nuevo.

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);

Nota

Solo sincronización basada en particiones

Este método solo admite la conversión entre un dominio sin sincronización y la sincronización basada en particiones. Si tu aplicación usa la sincronización flexible, debes iterar manualmente los objetos de un dominio y copiarlos al otro.

Volver

Transmitir datos a Atlas

En esta página