私は RavenDb サーバーとクライアント 3.5.0 を使用しており、UniqueConstraint を機能させようとしましたが成功しませんでした。
単純なケース:
using Raven.Client.UniqueConstraints;
public class User {
public string Id { get; set; }
[UniqueConstraint]
public string Email { get; set; }
}
ドキュメントには次のように記載されています。
Raven.Bundles.UniqueContraints アセンブリを Plugins ディレクトリにドロップします。
NuGet:Install-Package RavenDB.Bundles.UniqueConstraints -Version 3.5.0
を使用して実行し、Raven のルート ディレクトリに自分で作成した Plugins フォルダーにバイナリ Raven.Bundles.UniqueConstraints.dll を貼り付けます。
ユーザー ドキュメントを保存した後、メタデータでこれを取得します。
"Ensure-Unique-Constraints": [
{
"Name": "Email",
"CaseInsensitive": false
}
]
すべてが機能しているように見えますが、同じメールでドキュメントを保存しています。
UniqueConstraintCheckResult<User> checkResult = session.CheckForUniqueConstraints(user);
// returns whether its constraints are available
if (checkResult.ConstraintsAreFree())
{
session.Store(user);
session.SaveChanges();
}
私はこのリンクをチェックしますRavenDB UniqueConstraintが機能していないようです。人々は解決策のない同じ問題を抱えています。場合によっては、解決策としてプロパティが手動でデータベースに既に存在するかどうかを確認していると彼らは言いました。
ドキュメントにも次のように書かれています。
サーバー全体で一意の制約を有効にするには、グローバル構成ファイルの Raven/ActiveBundles 構成に一意の制約を追加するか、API または Studio を使用して一意の制約バンドルをオンにして新しいデータベースをセットアップします。
しかし、それを行う方法の手がかりがありません。私はいくつかの検索を行い、可能な方法を見つけました: Studio で、データベースを選択し、[設定] -> [データベース設定] に移動すると、次の構成が見つかりました:
{
"Id": "TestRaven",
"Settings": {
"Raven/DataDir": "~\\TestRaven"
},
"SecuredSettings": {},
"Disabled": false
}
そして私はこの設定を追加しようとしました:
"Settings": {
"Raven/DataDir": "~\\TestRaven",
"Raven/ActiveBundles": "UniqueConstraints"
}
次に、保存しようとするとエラーが発生します。エラーメッセージには、「データベースは既に作成されており、バンドルを変更または追加できません」などのメッセージが表示され、この行を追加するよう提案され"Raven-Temp-Allow-Bundles-Change": true
、UniqueConstraint バンドル構成で設定を保存できました。
これまでのところ、ドキュメントに記載されているすべての要件を実行したと思います。最後のものは次のとおりです。
関連するアセンブリが Plugins ディレクトリにある場合でも、ActiveBundles リストに追加されていないバンドルはアクティブになりません。
バンドル リストを見つけた唯一の場所は、Studio で新しいデータベースを作成することですが、リストは編集できず、既に有効になっているものに関する情報だけです。
ドキュメントには多くの要件が記載されていますが、それを行う方法については教えてくれません。非常にスマートです。方法を推測する必要があります。ここまでたどり着くことができましたが、どうですか?まだ機能していません!
私の質問は、UniqueConstraints は RavenDb で本当に機能するのでしょうか? 誰かがこれを機能させましたか?
はいの場合、クラウドの方法を教えてください。
前もって感謝します!
[編集] 次の行を追加したことを忘れていました。
store.Listeners.RegisterListener(new UniqueConstraintsStoreListener());
また、バージョン 3.5.1 でも試しました。