Esta guía de inicio rápido muestra cómo usar Realm con el SDK de Realm.NET. También muestra cómo agregar Device Sync con Atlas App Services a su aplicación. Antes de comenzar, asegúrese de tener instalado el SDK de .NET.
Instalar Realm
Siga estos pasos para agregar el SDK .NET a su proyecto.
Importante
Instalar el SDK para todos los proyectos
Si tiene una solución multiplataforma, asegúrese de instalar el SDK para todos los proyectos de la plataforma, incluso si el proyecto en cuestión no contiene ningún código específico del SDK.
Abra el Administrador de paquetes NuGet
En el Explorador de soluciones, haga clic derecho en su solución y seleccione Manage NuGet Packages... para abrir la ventana de administración de paquetes NuGet.

Nota
Agregar el paquete en el nivel de Solución le permite agregarlo a cada proyecto en un solo paso.
Agregue Realm Weaver a FodyWeavers.xml
Nota
Puedes omitir este paso si aún no lo estabas usando
Comida en su proyecto. Visual Studio generará un archivo correctamente configurado.
FodyWeavers.xml archivo para usted cuando realiza la primera compilación.
Si tu proyecto ya usaba Fody, debes agregar manualmente el tejedor de Realm a tu FodyWeavers.xml archivo. Al terminar, tu FodyWeavers.xml archivo debería verse así:
<Weavers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FodyWeavers.xsd"> <Realm /> </Weavers>
Reino de importación
Agregue la siguiente línea en la parte superior de sus archivos de origen para usar Realm:
using Realms;
Define tu modelo de objeto
El modelo de objetos de su aplicación define los datos que puede almacenar dentro de Realm y sincronizar hacia y desde App Services.
Importante
Herencia
Todos los objetos Realm heredan de la interfaz IRealmObject, IEmbeddedObject o IAsymmetricObject y deben declararse como partial clases.
En versiones del SDK de .NET anteriores 10.18.0 a, los objetos derivan de las clases base RealmObject, EmbeddedObject o AsymmetricObject. Este enfoque para la definición del modelo Realm aún se admite, pero no incluye nuevas funciones como las anotaciones de nulabilidad. En una futura versión del SDK, las clases base quedarán obsoletas. Debe usar las interfaces para cualquier clase nueva que escriba y considerar la migración de las clases existentes.
El siguiente código muestra cómo definir un modelo de objeto para un objeto Item. En este ejemplo, hemos marcado el campo Id como clave principal y la propiedad Status como opcional. También hemos optado por usar el atributo MapTo; las propiedades se almacenarán en minúsculas en el servidor, pero podemos usar mayúsculas y minúsculas compatibles con .NET en los nombres de las propiedades al usar Device Sync.
public partial class Item : IRealmObject { [] [] public ObjectId Id { get; set; } = ObjectId.GenerateNewId(); [] public string Assignee { get; set; } [] public string? Name { get; set; } [] public string? Status { get; set; } }
Abrir un dominio local
En un reino solo local, se abre con el método Realm.GetInstance() o Realm.GetInstanceAsync(). El método que se use dependerá completamente de si se usan patrones asíncronos en la aplicación y de cómo se usen. El siguiente código muestra cómo GetInstance() usar:
var realm = Realm.GetInstance();
Para más información, consulta: Abre un Realm.
Crear, leer, actualizar y eliminar objetos
Al crear o actualizar documentos, todas las escrituras deben realizarse en una transacción.
El siguiente código muestra dos métodos para crear un nuevo objeto Realm. En el primer ejemplo, primero creamos el objeto y luego lo añadimos al reino mediante un método WriteAsync(). En el segundo ejemplo, creamos el documento dentro del WriteAsync bloque, que devuelve un objeto Realm con el que podemos seguir trabajando.
var testItem = new Item { Name = "Do this thing", Status = ItemStatus.Open.ToString(), Assignee = "Aimee" }; await realm.WriteAsync(() => { realm.Add(testItem); }); // Or var testItem2 = await realm.WriteAsync(() => { return realm.Add<Item>(new Item { Name = "Do this thing, too", Status = ItemStatus.InProgress.ToString(), Assignee = "Satya" }); } );
Insertar un documento es lo mismo que crear uno nuevo, excepto que se establece el parámetro opcional update en true. En este ejemplo, creamos un nuevo objeto Item con un valor único Id. Luego, insertamos un elemento con el mismo ID, pero con un valor Name diferente. Como se ha establecido el parámetro update en true, el registro existente se actualiza con el nuevo nombre.
var id = ObjectId.GenerateNewId(); var item1 = new Item { Id = id, Name = "Defibrillate the Master Oscillator", Assignee = "Aimee" }; // Add a new person to the realm. Since nobody with the existing Id // has been added yet, this person is added. await realm.WriteAsync(() => { realm.Add(item1, update: true); }); var item2 = new Item { Id = id, Name = "Fluxify the Turbo Encabulator", Assignee = "Aimee" }; // Based on the unique Id field, we have an existing person, // but with a different name. When `update` is true, you overwrite // the original entry. await realm.WriteAsync(() => { realm.Add(item2, update: true); }); // item1 now has a Name of "Fluxify the Turbo Encabulator" // and item2 was not added as a new Item in the collection.
También se eliminan elementos dentro de un método WriteAsync(). El siguiente código muestra cómo eliminar un solo Item de la colección y cómo eliminar una colección completa:
realm.Write(() => { realm.Remove(myItem); }); realm.Write(() => { realm.RemoveAll<Item>(); });
Las siguientes páginas cubren cada uno de estos temas con más detalle:
Cómo encontrar, filtrar y ordenar documentos
Se buscan documentos con el motor de consultas Realm, ya sea mediante LINQ o el lenguaje de consultas Realm (RQL). El siguiente ejemplo encuentra todos los objetos de tipo "Elemento":
var allItems = realm.All<Item>();
Los resultados se filtran con LINQ o RQL. Este ejemplo usa LINQ para buscar todos los elementos con estado "Abierto":
var openItems = realm.All<Item>() .Where(i => i.Status == "Open");
También puede ordenar los resultados utilizando LINQ o RQL:
var sortedItems = realm.All<Item>() .OrderBy(i => i.Status);
Para obtener detalles sobre cómo consultar, filtrar y ordenar documentos, consulte Filtrar y ordenar datos - .NET SDK.
Esté atento a los cambios
A medida que cambian las colecciones de documentos, a menudo es importante actualizar los datos en una aplicación cliente. Tú puedes supervisar un realm, colección u objeto para ver cambios con el método SubscribeForNotifications().
El siguiente ejemplo muestra cómo agregar un controlador de notificaciones en una colección de reinos completa:
// Observe realm notifications. realm.RealmChanged += (sender, eventArgs) => { // The "sender" object is the realm that has changed. // "eventArgs" is reserved for future use. // ... update UI ... };
También puedes agregar controladores de notificaciones a colecciones y objetos individuales. Para más información, consulta Reaccionar ante los cambios.
Agregar sincronización de dispositivos (opcional)
Si desea sincronizar los datos de Realm entre dispositivos, puede configurar Atlas App Services y habilitar la sincronización de dispositivos. Una vez hecho esto, agregue la sincronización a su código de cliente.
Requisitos previos
Antes de poder sincronizar los datos de Realm, debes:
Habilitar y configurar uno o más proveedores de autenticación
Habilite la sincronización flexible con el modo de desarrollo activado
Onen y un campo único en la Queryable Fields sección.
En el siguiente código, hemos habilitado la autenticación anónima y utilizamos ownerId como campo único en la configuración de sincronización flexible.
Inicializar la aplicación
Para usar las funciones de App Services, como la autenticación y la sincronización, accede a tu aplicación de App Services con tu ID de aplicación. Puedes encontrarlo en la interfaz de App Services.
Luego inicializa tu aplicación:
app = App.Create(myRealmAppId);
Usar modelos de objetos con sincronización
Al usar Sync, puede definir sus modelos de objetos directamente en el código solo si habilitó Sync con el modo de desarrollo en la interfaz de usuario de App Services.
Nota
Obtener el esquema de la interfaz de usuario si el modo de desarrollo está deshabilitado
Si ha habilitado la sincronización pero ha desactivado el modo de desarrollo, puede copiar y pegar las definiciones del modelo de objetos que App Services generó automáticamente desde la pestaña SDKs en la interfaz de usuario de App Services. Debe volver a habilitar el modo de desarrollo si desea realizar cambios en la definición del modelo de objetos desde el código del cliente.
Para obtener más información, consulte Crear un modelo de datos.
Autenticar un usuario
En esta guía de inicio rápido, utilizamos la autenticación anónima para iniciar sesión sin que los usuarios proporcionen información de identificación. Tras autenticar al usuario, puede abrir un reino para él.
var user = await app.LogInAsync(Credentials.Anonymous());
También debes proporcionar un método para que el usuario cierre sesión. El siguiente código muestra cómo hacerlo llamando a LogOutAsync():
await user.LogOutAsync();
El SDK de Realm.NET ofrece muchas maneras adicionales de autenticar, registrar y vincular usuarios. Para conocer otros proveedores de autenticación, consulte: Autenticar usuarios - SDK de .NET.
Abrir un reino sincronizado
Una vez que has habilitado Device Sync y autenticado a un usuario, puedes abrir un realm sincronizado. Utiliza un objeto FlexibleSyncConfiguration para controlar las especificaciones de cómo tu aplicación sincroniza datos con App Services. Luego agregas una suscripción Flexible Sync que determina qué datos puede query el usuario.
var config = new FlexibleSyncConfiguration(app.CurrentUser) { PopulateInitialSubscriptions = (realm) => { var myItems = realm.All<Item>().Where(n => n.OwnerId == myUserId); realm.Subscriptions.Add(myItems); } }; // The process will complete when all the user's items have been downloaded. var realm = await Realm.GetInstanceAsync(config);
La sintaxis para leer, escribir y observar notificaciones en un dominio sincronizado es idéntica a la sintaxis para dominios no sincronizados descrita anteriormente. Mientras trabaja con datos locales, un hilo en segundo plano integra, carga y descarga conjuntos de cambios de forma eficiente.
Para obtener información sobre cómo crear una aplicación de App Services habilitada para sincronización, consulte el Tutorial .NET.
Para información sobre cómo implementar Sync en tu código de cliente, consulta Añadir sincronizar dispositivo a una aplicación.

