クイック スタート - .NET SDK
項目一覧
このクイック スタートでは、Realm .NET SDK で Realm を使用する方法を説明します。 次に、Atlas App Services を使用した Device Sync をアプリに追加する方法を示します。 開始する前に、.NET SDK がインストールされていることを確認してください。
Realm のインストール
.NET SDK をプロジェクトに追加するには、次の手順に従います。
重要
すべてのプロジェクトに SDK をインストール
マルチプラットフォーム ソリューションを持っている場合は、特定のプロジェクトに SDK 固有のコードが含まれていない場合でも、 すべてのプラットフォーム プロジェクトの SDK をインストールしてください。
FedtyWeavers.xl への Realm ウィーバーの追加
注意
まだ 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 のインポート
Realm を使用するには、ソース ファイルの先頭に次の行を追加します。
using Realms;
オブジェクトモデルを定義する
アプリケーションのオブジェクトモデルは、Realm 内に保存し、App Services と同期できるデータを定義します。
重要
継承
すべての Realm オブジェクトはIRealmObject 、 IEMededObject 、またはIAmetricObjectインターフェースから継承し、 partial
クラスを宣言する必要があります。
10.18.0より前のバージョンの .NET SDK では、 オブジェクトは、 RealmObject 、埋め込みオブジェクト 、またはAmetricObject基本クラスから派生します。 Realm モデル定義へのこのアプローチは引き続きサポートされていますが、 null 可能性注釈などの新機能は含まれていません。 将来の SDK リリースでは、基本クラスは非推奨になる予定です。 作成する新しいクラスには インターフェースを使用し、既存のクラスの移行を検討する必要があります。
次のコードは、 Item
オブジェクトのオブジェクトモデルを定義する方法を示しています。 この例では、 Id
フィールドをプライマリキーとしてマークし、 Status
プロパティを任意としてマークしています。 また、 MapTo
属性を使用することも選択しました。プロパティはサーバー上に小文字で保存されますが、Device Sync を使用する場合は、プロパティ名に .NET 対応のケースを使用できます。
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; } }
ローカル Realm を開く
ローカル専用 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>(); });
次のページでは、これらのそれぞれのトピックについて、詳しく説明しています。
ドキュメントの検索、フィルタリング、ソート
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 。
Device Sync の追加(任意)
デバイス間で Realm データを同期する場合は、 Atlas App Services を構成し、 Device Syncを有効にします。 それが完了したら、クライアント コードに同期を追加します。
前提条件
Realm データを同期する前に、次の操作を行う必要があります。
1 つ以上の認証プロバイダを有効にして設定する
開発モード が
On
と セクションの一意のQueryable Fields フィールドに切り替えられている状態で Flexible Sync を有効にします。
次のコードでは匿名認証を有効にし、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 」を参照してください。
同期された Realm を開く
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 をアプリに追加する 」を参照してください。