Início rápido - .NET SDK
Nesta página
- Instalar Realm
- Importar Realm
- Definir seu modelo de objeto
- Abra um Realm local
- Criar, ler, atualizar e excluir objetos
- Localizar, filtrar e classificar documentos
- Fique atento às mudanças
- Adicionar Device Sync (opcional)
- Pré-requisitos
- Inicialize o aplicativo
- Use modelos de objetos com sincronização
- Autenticar um usuário
- Abrir um realm sincronizado
Este Início Rápido demonstra como usar o Realm com o Realm .NET SDK. Em seguida, ele demonstra como adicionar o Device Sync com Atlas App Services à sua aplicação. Antes de começar, certifique-se de ter instalado o .NET SDK.
Instalar Realm
Siga estas etapas para adicionar o .NET SDK a seu projeto.
Importante
Instalar o SDK para todos os projetos
Se você tiver uma solução multiplataforma, certifique-se de instalar o SDK para todos os projetos de plataforma, mesmo que o projeto em questão não contenha nenhum código específico do SDK.
Abrir o Gerenciador de pacotes NuGet
No Solution Explorer, clique com o botão direito do mouse em sua solução e selecione Manage NuGet Packages... para abrir a janela de gerenciamento do NuGet Package.
Observação
Adicionar o pacote no nível da Solução permite adicioná-lo a todos os projetos em uma única etapa.
Adicionar o Realm Weaver ao FodyWeavers.xml
Observação
Você pode pular esta etapa se ainda não estiver usando Fody em seu projeto. O Visual Studio gerará um arquivo FodyWeavers.xml
configurado corretamente para você quando você construir pela primeira vez.
Se o seu projeto já estava usando o Fody, você deve adicionar manualmente o Realm Weaver ao seu FodyWeavers.xml
arquivo . Quando terminar, seu arquivo FodyWeavers.xml
deverá ter a seguinte aparência:
<Weavers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FodyWeavers.xsd"> <Realm /> </Weavers>
Importar Realm
Adicione a seguinte linha na parte superior dos seus arquivos de origem para usar o Realm:
using Realms;
Definir seu modelo de objeto
O modelo de objeto do aplicativo define os dados que você pode armazenar no Realm e sincronizar de e para o Atlas App Services.
Importante
Herança
Todos os objetos do Realm herdam a partir da interface IRealmObject, IEmbeddedObject ou IAsymmetricObject e devem ser declarados partial
classes.
Em versões do .NET SDK anteriores a 10.18.0, objetos derivam das classes de base RealmObject, EmbeddedObject ou AsymmetricObject . Essa abordagem para a definição do modelo Realm ainda é suportada, mas não inclui novos recursos, como as anotações de nulidade. Em uma futura versão do SDK, as classes básicas se tornarão obsoletas. Você deve usar as interfaces para quaisquer novas classes que escrever e deve considerar a migração das suas classes existentes.
O seguinte código mostra como definir um modelo de objeto para um objeto Item
. Neste exemplo, marcamos o campo Id
como chave primária e marcamos a propriedade Status
como opcional. Também optamos por usar o atributo MapTo
; as propriedades serão armazenadas em letras minúsculas no servidor, mas podem usar letras maiúsculas e minúsculas compatíveis com .NET em nossos nomes de propriedade ao usar o 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; } }
Abra um Realm local
Em um domínio somente local, você abre um domínio com o método Realm.GetInstance() ou Realm.GetInstanceAsync() . O método que você usa depende inteiramente se e como você está usando padrões assíncronos em seu aplicativo. O seguinte código mostra como utilizar o GetInstance()
:
var realm = Realm.GetInstance();
Para mais informações, consulte: Abrir um Realm.
Criar, ler, atualizar e excluir objetos
Ao criar ou atualizar documentos, todas as gravações devem ocorrer em uma transação.
O código a seguir mostra dois métodos para criar um novo objeto de Realm. No primeiro exemplo, criamos o objeto primeiro e, em seguida, o adicionamos ao domínio dentro de um método WriteAsync() . No segundo exemplo, criamos o documento dentro do bloco WriteAsync
, que retorna um objeto de domínio com o qual podemos trabalhar ainda mais.
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" }); } );
A atualização de um documento é o mesmo que a criação de um novo, exceto pelo fato de que você define o parâmetro opcional update
como true
. Neste exemplo, criamos um novo objeto Item
com um Id
exclusivo. Em seguida, inserimos um item com o mesmo ID, mas um valor Name
diferente. Como definimos o parâmetro update
como true
, o registro existente é atualizado com o novo nome.
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.
Você também exclui itens dentro de um método WriteAsync()
. O seguinte código mostra como excluir um único Item
da coleção e como excluir uma coleção inteira:
realm.Write(() => { realm.Remove(myItem); }); realm.Write(() => { realm.RemoveAll<Item>(); });
As páginas a seguir abordam cada um desses tópicos em mais detalhes:
Localizar, filtrar e classificar documentos
Você Atlas Search com o mecanismo de query Realm , usando LINQ ou o RQL (RQL). O exemplo a seguir encontra todos os objetos do tipo "Item":
var allItems = realm.All<Item>();
Você filtra os resultados usando LINQ ou RQL. Este exemplo usa LINQ para encontrar todos os itens que tenham o status de "Aberto":
var openItems = realm.All<Item>() .Where(i => i.Status == "Open");
Você também pode classificar os resultados usando LINQ ou RQL:
var sortedItems = realm.All<Item>() .OrderBy(i => i.Status);
Para obter detalhes sobre query, filtragem e classificação de documentos, consulte Filtrar e classificar dados - .NET SDK.
Fique atento às mudanças
À medida que as coleção de documento mudam, geralmente é importante fazer atualizações nos dados em um aplicativo cliente . Você pode assistir a um Realm, coleção ou objeto para alterações com o método SubscribeForNotifications() .
O exemplo a seguir mostra como adicionar um manipulador de notificações em uma coleção de domínio inteira:
// Observe realm notifications. realm.RealmChanged += (sender, eventArgs) => { // The "sender" object is the realm that has changed. // "eventArgs" is reserved for future use. // ... update UI ... };
Você também pode adicionar manipuladores de notificações em coleções e objetos individuais. Para mais informações, veja React a alterações.
Adicionar Device Sync (opcional)
Se você deseja sincronizar dados do Realm entre dispositivos, você pode configurar o Atlas App Services e habilitar a Device Sync. Depois de fazer isso, você adiciona a sincronização ao código do cliente.
Pré-requisitos
Antes de sincronizar os dados do Realm, você deve:
Habilitar e configurar um ou mais fornecedores de autenticação
Habilitar Flexible Sync com Modo de Desenvolvimento alternou para
On
e um campo único na seção Queryable Fields .
No código a seguir, habilitamos a autenticação anônima e estamos usando ownerId
como o campo exclusivo na configuração da Flexible Sync.
Inicialize o aplicativo
Para usar as funcionalidades do App Services, como autenticação e sincronização, acesse o App Services App usando seu ID do aplicativo. O ID do aplicativo está disponível na UI do App Services.
Em seguida, você inicializa seu aplicativo:
app = App.Create(myRealmAppId);
Use modelos de objetos com sincronização
Ao usar o Sync, você pode definir seus modelos de objeto diretamente no código somente se tiver habilitado a sincronização com o modo de desenvolvimento na interface do usuário do Atlas App Services .
Observação
Obter esquema da UI se o modo de desenvolvimento estiver desabilitado
Se você habilitou a Sincronização mas desativou o Modo de Desenvolvimento, você poderá copiar e colar as definições do modelo de objeto que o Atlas App Services gerou para você a partir da guia SDKs na interface do usuário do Atlas App Services . Você deve reativar o modo de desenvolvimento se quiser fazer alterações na definição do modelo de objeto a partir do código do lado do cliente.
Para mais informações, consulte Criar um Modelo de Dados.
Autenticar um usuário
Neste início rápido, estamos usando a autenticação anônima para fazer login de usuários sem exigir que eles forneçam nenhuma informação de identificação. Depois de autenticar o usuário, você pode abrir um domínio para esse usuário.
var user = await app.LogInAsync(Credentials.Anonymous());
Você também deve fornecer uma maneira de o usuário sair. O código a seguir mostra como fazer isso ligando para LogOutAsync()
:
await user.LogOutAsync();
O Realm .NET SDK oferece muitas maneiras adicionais de autenticar, registrar e vincular usuários. Para outros fornecedor de autenticação, consulte: Autenticar usuários - .NET SDK
Abrir um realm sincronizado
Depois de ativar o Device Sync e autenticar um usuário, você pode abrir um domínio sincronizado. Use um objeto FlexibleSyncConfiguration
para controlar as especificidades de como seu aplicativo sincroniza dados com o Atlas App Services. Em seguida, você adiciona uma assinatura da Flexible Sync que determina quais dados o usuário pode consultar.
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);
A sintaxe para ler, gravar e observar notificações em um domínio sincronizado é idêntica à sintaxe para domínios não sincronizados acima. Enquanto você trabalha com dados locais, um thread em segundo plano integra, carrega e baixa conjuntos de alterações de forma eficiente.
Para obter informações sobre como criar um App Services App habilitado para sincronização, consulte o Tutorial do.NET .
Para obter informações sobre como implementar a sincronização no código do cliente, consulte Adicionar Device Sync a um aplicativo.