Docs Menu
Docs Home
/ /
Atlas Device SDK
/ /

パーティションベースの同期 - .NET SDK

項目一覧

  • パーティション値
  • オンライン中にパーティションベースの同期Realmを開く
  • オフライン時にパーティションベースの同期Realmを開く
  • パーティションベースの同期から Flexible Sync への移行
  • 移行後のクライアント コードの更新
  • 同期されていない Realm から同期された Realm への移行

パーティションベースの同期 は、Realm .NET SDK で Atlas Device Sync を使用するための古いモードです。 新しいアプリにはFlexible Syncを使用することをお勧めします。 このページの情報は、パーティションベースの同期を引き続き使用しているユーザー向けです。

Tip

Realm .NET SDK v 11.1.0以降では、パーティションベースの同期から Flexible Sync に移行する機能がサポートされています。 詳細については、「 パーティションベースの同期から Flexible Sync への移行」を参照してください。 古いパーティションベースの同期アプリを Flexible Sync を使用するように移行することをお勧めします。

バックエンド アプリ構成にパーティションベースの同期を選択する場合、クライアント実装にはパーティション値を含める必要があります。 これは、 Flexible Sync を設定するときに選択したパーティションキーフィールドの値です。

パーティション値によって、クライアント アプリケーションがアクセスできるデータが決まります。 同期された Realm を開くときに、パーティション値を渡します。

オンライン中に同期された Realm を開く手順は次のとおりです。

  1. アプリ コードでは、ユーザーの認証手順を説明します。

  2. パーティションユーザーオブジェクトを含む FlexibleSyncConfiguration オブジェクトを作成します。

  3. PartitionSyncConfigurationオブジェクトを渡して、 GetInstanceAsync()メソッドを呼び出して、同期された Realm を開きます。

次のコードは、これらの手順を示しています。

user = await app.LogInAsync(
Credentials.EmailPassword("caleb@mongodb.com", "MySekritPwd"));
config = new PartitionSyncConfiguration("myPart", user);
try
{
realm = await Realm.GetInstanceAsync(config);
}
catch (Exception ex)
{
Console.WriteLine($@"Error creating or opening the
realm file. {ex.Message}");
}

上記の例では、コードはGetInstanceAsync()を呼び出して Realm を非同期に開く方法を示しています。 GetInstance() メソッドを呼び出して、Realm を 同期 的に開くこともできます。

var synchronousRealm = Realm.GetInstance(config);

Tip

以下も参照してください。

ユーザーが認証を行うと、ユーザーがログオフするまでUserオブジェクトはデバイス上に保持されます。 これにより、アプリは既存のユーザーを取得し、オフラインの状態で同期された Realm を開くことができます。 オフライン中に発生した変更は、デバイスがアプリに再接続すると、SDK によって同期されます。

次のコードは、既存のUserオブジェクトがあるかどうかを確認する方法を示しています。 何も見つからない場合は、 について説明されているプロセスを使用してユーザーを取得します。 デバイスにすでにuserがある場合は、そのユーザーと同期された Realm が開きます。

if (app.CurrentUser == null)
{
// App must be online for user to authenticate
user = await app.LogInAsync(
Credentials.EmailPassword("caleb@mongodb.com", "MySekritPwd"));
config = new PartitionSyncConfiguration("_part", user);
realm = await Realm.GetInstanceAsync(config);
}
else
{
// This works whether online or offline
user = app.CurrentUser;
config = new PartitionSyncConfiguration("_part", user);
realm = Realm.GetInstance(config);
}

App Services Device Sync モードを、パーティションベースの同期から Flexible Sync に移行できます。 移行は自動プロセスであり、アプリケーション コードを変更する必要はありません。 自動移行には Realm .NET SDK バージョン 11.1.0 が必要です。 またはそれ以降

移行により、既存の App Services ユーザーと認証構成を維持できます。 Flexible Sync は、より多目的の権限構成オプションとよりきめの細かいデータ同期を提供します。

App Services App をパーティションベースの同期から Flexible Sync に移行する方法の詳細については、「 Device Sync モードの移行 」を参照してください。

パーティションベースの同期から Flexible Sync への自動移行には、クライアント コードを変更する必要はありません。 ただし、この機能をサポートするために、Realm は 2 つの同期モード間の違いを次の方法で自動的に処理します。

  • partitionKey == partitionValueの各オブジェクトタイプの Flexible Sync サブスクリプションを自動的に作成します。

  • すべてのオブジェクトにpartitionKeyフィールドを挿入します(フィールドがまだ存在しない場合)。 これは自動 Flexible Sync サブスクライブに必要です。

If you need to make updates to your client code after migration, consider updating your client codebase to remove hidden migration functionality. 次の場合には、クライアント コードベースを更新する必要がある場合があります。

  • クライアント コードベースで新しいモデルを追加または変更する

  • Realm オブジェクトの読み取りまたは書き込みを含む機能を追加または変更する場合

  • 同期するデータの内容をより詳細に制御する機能を実装したい

Flexible Sync を使用するようにパーティションベースの同期クライアント コードを変換するには、次の変更を行います。

  • FlexibleSyncConfigurationFlexibleSyncConfiguration を変更します。

  • Flexible Sync サブスクライブで使用する関連プロパティをオブジェクトモデルに追加します。 たとえば、ユーザーが自分のデータのみを同期できるようにするには、 ownerIdプロパティを追加します。

  • 自動 Flexible Sync サブスクライブを削除し、関連するサブスクライブを手動で作成します。

これらの戦略にデータをモデル化する方法の例を含む、Flexible Sync 権限戦略の例については、 Device Sync 権限ガイド を参照してください。

パーティションベースの同期から Flexible Sync に移行すると、Realm はアプリ用の非表示の Flexible Sync サブスクリプションを自動的に作成します。 次回サブスクリプションを追加または変更するときは、次の操作を行うことをお勧めします。

  1. 自動生成サブスクライブを削除します。

  2. クライアント コードベースに関連するサブスクリプションを手動で追加します。

これにより、将来の反復やデバッグのために、すべてのサブスクライブ ロジックをコードベースにまとめて表示できます。

自動生成される Flexible Sync サブスクライブの詳細については、「クライアント アプリの Flexible Sync への移行 」を参照してください。

同期されていない Realm を同期された Realm(パーティションベースの同期を使用)に変換できます。 同期されていないRealmから、パーティションベースの同期を使用するRealmに変換するには、次の手順を実行します。

  1. 既存のRealmを開きます。

  2. 新しいRealm の構成を作成します。

  3. 既存の Realm でWriteCopy()メソッドを呼び出して、データを新しい Realm にコピーします。

次のコードでは、同期されていない Realm を開き、新しいFlexible Object オブジェクトを作成し、既存の Realm を新しい Realm にコピーします。 次に、既存の Realm を削除し、新しい Realm を開きます。

var existingConfig = new RealmConfiguration("example.realm");
var existingRealm = Realm.GetInstance(existingConfig);
var app = App.Create("my-app-id");
var user = await app.LogInAsync(
Credentials.EmailPassword("email@example.com", "password"));
var syncConfig = new PartitionSyncConfiguration("user_partition", user);
existingRealm.WriteCopy(syncConfig);
// You can now delete the nonsynced realm:
Realm.DeleteRealm(existingConfig);
// You can now use the synced realm:
var syncedRealm = Realm.GetInstance(syncConfig);

注意

パーティションベースの同期のみ

このメソッドは、非同期 Realm と パーティションベースの同期 との間の変換のみをサポートします。 アプリで Flexible Sync を使用する場合は、一方の Realm 内のオブジェクトを手動で反復処理し、もう一方の Realm にコピーする必要があります。

戻る

Atlas へのデータのストリーム