This Quick Start demonstrates how to use Realm with the Realm .NET SDK. It then demonstrates adding Device Sync with Atlas App Services to your app. Before you begin, ensure you have Installed the .NET SDK.
Install Realm
Follow these steps to add the .NET SDK to your project.
Importante
Install the SDK for all projects
If you have a multi-platform solution, be sure to install the SDK for all of the platform projects, even if the given project doesn't contain any SDK-specific code.
Open the NuGet Package Manager
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
Adding the package at the Solution level allows you to add it to every project in one step.
Add the Realm Weaver to 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.
If your project was already using Fody, you must manually add the Realm weaver to your FodyWeavers.xml file. When done, your FodyWeavers.xml file should look something like this:
<Weavers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FodyWeavers.xsd"> <Realm /> </Weavers>
Import Realm
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 objeto de tu aplicación define los datos que puedes almacenar dentro de Realm y sincronizar hacia y desde App Services.
Importante
Herencia
All Realm objects inherit from the IRealmObject, IEmbeddedObject, or IAsymmetricObject interface and must be declared partial classes.
En versiones del SDK de .NET anteriores a 10.18.0, los objetos derivan de las clases base RealmObject, EmbeddedObject o AsymmetricObject. Este enfoque para definir el modelo de Realm aún se admite, pero no incluye nuevas funcionalidades como las anotaciones de nulabilidad. En una versión futura del SDK, las clases base quedarán obsoletas. Se debe usar las interfaces para cualquier clase nueva que escribas y considerar migrar tus clases existentes.
The following code shows how to define an object model for an Item object. In this example, we have marked the Id field as the Primary Key and marked the Status property as optional. We've also chosen to use the MapTo attribute; properties will be stored in lower case on the server, but can use .NET-friendly casing on our property names when using 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 Realm local
In a local-only realm, you open a realm with either the Realm.GetInstance() or Realm.GetInstanceAsync() method. Which method you use depends entirely on if and how you are using asynchronous patterns in your app. The following code shows how to use GetInstance():
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 operaciones de guardar deben acontecer dentro de 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" }); } );
Actualizar un documento es lo mismo que crear uno nuevo, excepto que se establece el parámetro adicional opcional update en true. En este ejemplo, creamos un nuevo objeto Item con un Id único. Luego insertamos un elemento con el mismo id pero con un valor diferente de Name. Como hemos configurado 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 puedes borrar 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 toda una colección:
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 query de Realm, utilizando LINQ o el Realm Query Language (RQL). El siguiente ejemplo encuentra todos los objetos de tipo "Item":
var allItems = realm.All<Item>();
You filter results using either LINQ or RQL. This example uses LINQ to find all Items that have a status of "Open":
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, consulta 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 a toda una colección realm:
// 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 añadir manejadores de notificaciones en colecciones y objetos individuales. Para obtener más información, consulta Reaccionar a 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
Before you can sync Realm data, you must:
Activa y configura uno o más proveedores de autenticación
Enable Flexible Sync with Development Mode toggled to
Onand an unique field in the Queryable Fields section.
In the following code, we have enabled anonymous authentication and are using the ownerId as the unique field in the Flexible Sync configuration.
Inicializar la aplicación
To use App Services features such as authentication and sync, access your App Services App using your App ID. You can find your App ID in the App Services UI.
You then initialize your app:
app = App.Create(myRealmAppId);
Utiliza modelos de objetos con Sync
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
Get Schema from UI if Development Mode Disabled
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 más información, consulta Crear un modelo de datos.
Authenticate a User
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.
Open a Synced Realm
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 App Services app habilitada para sincronizar, consulta el Tutorial sobre .NET.
Para información sobre cómo implementar Sync en tu código de cliente, consulta Añadir sincronizar dispositivo a una aplicación.

