Docs Menu
Docs Home
/ /
Atlas Device SDK

クイック スタート - .NET SDK

項目一覧

  • Realm のインストール
  • Realm のインポート
  • オブジェクトモデルを定義する
  • ローカル Realm を開く
  • オブジェクトの作成、読み取り、更新、削除
  • ドキュメントの検索、フィルタリング、ソート
  • 変更の監視
  • Device Sync の追加(任意)
  • 前提条件
  • アプリを初期化する
  • 同期付きでオブジェクト モデルを使用
  • ユーザーの認証
  • 同期された Realm を開く

このクイック スタートでは、Realm .NET SDK で Realm を使用する方法を説明します。 次に、Atlas App Services を使用した Device Sync をアプリに追加する方法を示します。 開始する前に、.NET SDK がインストールされていることを確認してください。

.NET SDK をプロジェクトに追加するには、次の手順に従います。

重要

すべてのプロジェクトに SDK をインストール

マルチプラットフォーム ソリューションを持っている場合は、特定のプロジェクトに SDK 固有のコードが含まれていない場合でも、 すべてのプラットフォーム プロジェクトの SDK をインストールしてください。

1

ソリューション エクスプローラーでソリューションを右クリックし、 Manage NuGet Packages...を選択して NuGet パッケージ管理ウィンドウを開きます。

NuGet パッケージ管理ウィンドウを開きます。
クリックして拡大します

注意

ソリューション レベルで パッケージを追加すると、1 つの手順ですべてのプロジェクトに追加できます。

2

検索バーで、「 Realm 」を検索します。 結果を選択し、[ Add Package ] をクリックします。 Xamarin を使用している場合は、Realm パッケージを使用するプロジェクトを選択するよう求められることがあります。 すべてのプロジェクトを選択し、[ Ok ] をクリックします。

1

ソリューション エクスプローラーでソリューションを右クリックし、 Manage NuGet Packages for Solution...を選択して NuGet パッケージ管理ウィンドウを開きます。

NuGet パッケージ管理ウィンドウを開きます。
クリックして拡大します
2

検索バーで、「 Realm 」を検索します。 結果を選択し、[ Install ] をクリックします。 プロンプトが表示されたら、すべてのプロジェクトを選択し、[ Okをクリックします。

Realm を検索し、プロジェクトに追加します。
クリックして拡大します
3

注意

まだ Fedy を使用してい ない 場合は、この手順をスキップできます をプロジェクトします。Visual Studio は最初にビルドするときに、適切に構成された FodyWeavers.xmlファイルを生成します。

プロジェクトがすでに Fortune を使用している場合 、 ファイルに RealmFodyWeavers.xml ウィーバーを手動で追加する必要があります。完了すると、 FodyWeavers.xmlファイルは次のようになります。

<Weavers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FodyWeavers.xsd">
<Realm />
</Weavers>

Realm を使用するには、ソース ファイルの先頭に次の行を追加します。

using Realms;

アプリケーションのオブジェクトモデルは、Realm 内に保存し、App Services と同期できるデータを定義します。

重要

継承

すべての Realm オブジェクトはIRealmObjectIEMededObject 、またはIAmetricObjectインターフェースから継承し、 partialクラスを宣言する必要があります。

10.18.0より前のバージョンの .NET SDK では、 オブジェクトは、 RealmObject埋め込みオブジェクト 、またはAmetricObject基本クラスから派生します。 Realm モデル定義へのこのアプローチは引き続きサポートされていますが、 null 可能性注釈などの新機能は含まれていません。 将来の SDK リリースでは、基本クラスは非推奨になる予定です。 作成する新しいクラスには インターフェースを使用し、既存のクラスの移行を検討する必要があります。

次のコードは、 Itemオブジェクトのオブジェクトモデルを定義する方法を示しています。 この例では、 Idフィールドをプライマリキーとしてマークし、 Statusプロパティを任意としてマークしています。 また、 MapTo属性を使用することも選択しました。プロパティはサーバー上に小文字で保存されますが、Device Sync を使用する場合は、プロパティ名に .NET 対応のケースを使用できます。

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

ローカル専用 Realm では、 Realm.GetInstance() メソッドまたは Realm.GetInstanceAsync() メソッドを使用して Realm を開きます。どの方法を使用するかは、 非同期パターン を使用しているかどうか、またどのように使用するかによって完全に異なります。 アプリ内。次のコードは、 GetInstance()を使用する方法を示しています。

var realm = Realm.GetInstance();

詳細については、「 Realm を開く 」を参照してください。

ドキュメントを作成または更新する際、すべての書込み (write) はトランザクション内で実行される必要があります。

次のコードは、新しい Realm オブジェクトを作成するための 2 つの方法を示しています。 最初の例では、最初に オブジェクトを作成し、それをWriteAsync()メソッド内の Realm に追加します。 2 番目の例では、 WriteAsyncブロック内に ドキュメントを作成しています。これにより、さらに操作可能な Realm オブジェクトが返されます。

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

ドキュメントをアップサートする方法は、任意のupdateパラメータをtrueに設定することを除いて、新しいドキュメントの作成と同じです。 この例では、一意のIdを持つ新しいItemオブジェクトを作成します。 次に、ID は同じであるがName値が異なるアイテムを挿入します。 updateパラメータがtrueに設定されているため、既存のレコードは新しい名前で更新されます。

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.

また、 WriteAsync()メソッド内のアイテムも削除します。 次のコードは、コレクションから単一のItemを削除する方法と、コレクション全体を削除する方法を示しています。

realm.Write(() =>
{
realm.Remove(myItem);
});
realm.Write(() =>
{
realm.RemoveAll<Item>();
});

次のページでは、これらのそれぞれのトピックについて、詳しく説明しています。

  • 作成

  • Update

  • 削除

RealmLINQ またはRQL (RQL )を使用して、 クエリ エンジンでドキュメントを検索します。次の例では、「Item」型のすべてのオブジェクトを検索します。

var allItems = realm.All<Item>();

LINQ または RQL のいずれかを使用して結果をフィルタリングします。 この例では、LINQ を使用して、ステータスが「オープン」であるすべてのアイテムを検索します。

var openItems = realm.All<Item>()
.Where(i => i.Status == "Open");

LINQ または RQL を使用して結果を並べ替えることもできます。

var sortedItems = realm.All<Item>()
.OrderBy(i => i.Status);

ドキュメントのクエリ、フィルタリング、ソートの詳細については、「データのフィルタリングとソート - .NET SDK 」を参照してください。

ドキュメント コレクションが変更されると、クライアントアプリのデータを更新することが重要になることがよくあります。 SubscribeForNotifications() メソッドを使用し て、Realm、コレクション、またはオブジェクトの変更を監視 できます。

次の例は、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 ...
};

コレクションや個々のオブジェクトに通知ハンドラーを追加することもできます。 詳細については、「変更への対応 」を参照してReact 。

デバイス間で Realm データを同期する場合は、 Atlas App Services を構成し、 Device Syncを有効にします。 それが完了したら、クライアント コードに同期を追加します。

Realm データを同期する前に、次の操作を行う必要があります。

次のコードでは匿名認証を有効にし、Flexible Sync 構成の一意のフィールドとしてownerIdを使用しています。

認証や同期などの App Services 機能を使用するには、App ID を使用して App Services App にアクセスします。 アプリ ID は、App Services UI で確認できます

次に、アプリを初期化します。

app = App.Create(myRealmAppId);

同期を使用する場合、Atlas App Services UI で開発モードで 同期 を有効にした場合にのみ、コード内でオブジェクトモデルを直接定義できます。

注意

開発モードが無効になっている場合は、UI からスキーマを取得する

同期を有効にして開発モードをオフにした場合は、App Services UI のSDKsタブから、App Services が生成したオブジェクトモデルの定義をコピーして貼り付けることができます。 クライアント側コードからオブジェクトモデルの定義に変更を加える場合は、開発モードを再度有効にする必要があります。

詳細については、「データモデルの作成 」を参照してください。

このクイック スタートでは、匿名認証を使用してユーザーをログインさせ、識別情報の提供を要求していません。 ユーザーを認証したら、そのユーザーのRealmを開くことができます。

var user = await app.LogInAsync(Credentials.Anonymous());

ユーザーがログアウトする方法も提供する必要があります。 次のコードでは、 LogOutAsync()を呼び出してこれを行う方法が示されています。

await user.LogOutAsync();

Realm .NET SDK は、ユーザーを認証、登録、リンクするための多くの追加の方法を提供します。 その他の認証プロバイダについては、「ユーザーの認証 - .NET SDK 」を参照してください。

Device Sync を有効にしてユーザーを認証したら、同期されたRealmを開くことができます。 アプリケーションが App Services とデータを同期する方法の詳細を制御するには、 FlexibleSyncConfigurationオブジェクトを使用します。 次に、ユーザーがクエリできるデータを決定するFlexible Sync サブスクライブを追加します。

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

同期された Realm で通知を読み取り、書き込み、監視する構文は、上記の同期されていない Realm の構文と同じです。 ローカル データを操作している間に、バックグラウンド スレッドが変更セットを効率的に統合、アップロード、ダウンロードします。

同期対応のApp Services Appの作成の詳細については、 .NETチュートリアル を参照してください。

クライアント コードで同期を実装する方法の詳細については、「 Device Sync をアプリに追加する 」を参照してください。

次へ

Atlas Device SDK Docsへようこそ