Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /
SDK de Dispositivo Atlas

Inicio rápido - SDK .NET

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.

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.

1

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.

Abra la ventana de gestión de paquetes NuGet.
haga clic para ampliar

Nota

Adding the package at the Solution level allows you to add it to every project in one step.

2

En la barra de búsqueda, busca Realm. Selecciona el resultado y haz clic en Add Package. Si usas Xamarin, es posible que se te solicite seleccionar qué proyectos utilizan el paquete Realm. Selecciona todos los proyectos y luego haz clic en Ok.

1

In the Solution Explorer, right-click your solution and select Manage NuGet Packages for Solution... to open the NuGet Package management window.

Abra la ventana de gestión de paquetes NuGet.
haga clic para ampliar
2

En la barra de búsqueda, buscar Realm. Selecciona el resultado y haz clic en Install. Cuando se solicite, selecciona todos los proyectos y haz clic en Ok.

Busca Realm y agrégalo a tu(s) proyecto(s).
haga clic para ampliar
3

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>

Agregue la siguiente línea en la parte superior de sus archivos de origen para usar Realm:

using Realms;

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
{
[PrimaryKey]
[MapTo("_id")]
public ObjectId Id { get; set; } = ObjectId.GenerateNewId();
[MapTo("assignee")]
public string Assignee { get; set; }
[MapTo("name")]
public string? Name { get; set; }
[MapTo("status")]
public string? Status { get; set; }
}

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.

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:

  • Crear

  • Update

  • Borrar

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.

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.

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.

Before you can sync Realm data, you must:

In the following code, we have enabled anonymous authentication and are using the ownerId as the unique field in the Flexible Sync configuration.

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

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.

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.

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.

Next

Bienvenido a la Docs de Atlas Device SDK

En esta página