2012-04-30 10 views
0

インスタンスを挿入するのにを使用し、それらを更新するためにcollection.Save<T>を使用できます。MongoDbのc#ドライバが特定のインスタンスを削除するための同様のメソッドを提供しない理由はありません。それらのRemoveメソッドは、Query.EQ("Id", BsonValue.Create(id))のようなハードコーディングプロパティ名を必要とすると思われるIMongoQuery引数を要求します。 Remove<T>のようなインスタンスを削除するか、RemoveByIdを使用するか、特定の入力タイプを使用してLINQのようなクエリを構築するか、プロパティのハードコードを取り除くための方法を指定したいと思っています。エンティティフレームワークPOCO。そんなことはありますか?MongoDb用.NETドライバ:プロパティ名のハードコーディングを避ける方法はありますか?

UPDATE:[OK]を、私はそれを行うための一つの方法を見つけた:

IMongoQuery mq = new QueryDocument(entity.ToBsonDocument()); 
customers.Remove(mq); 

は、それが唯一の方法ですか?

おかげ

+0

しかし、私はあなたがこのことをどのようにテンプレートすることができるかわかりません。なぜなら、IDはそのような特定のものだからです。テンプレート関数を使用する場合、IDをどのように指定しますか? – Kiril

+0

私はIdを例に挙げていますが、問題はより広いです:削除操作のエンティティをプロパティ名をハードコーディングしないように指定する方法はありますか?方法の1つは、エンティティへの参照を指定することかもしれません、他の方法は、アイデアの値ではなく、その名前(メソッドcollection.FindOneById()に等しい)を指定することです、理想的に私はLINQのようなメソッドを持ってうれしい=>エンティティ.Id == 1)。とにかく私はデータベースの属性名をハードコーディングするのが嫌いです – YMC

答えて

1

あなたが求めているが、それは頻繁に機能を求めているものを行う方法はまだありません。あなたはこのJIRAのリクエストに応じて機能のために投票することができます:

https://jira.mongodb.org/browse/CSHARP-457

アプローチあなたは作品が見つかりましたが利き、むしろ重いです。ドキュメント全体をクエリとして使用しています。はい、削除しようとしているドキュメントと一致しますが、必要以上にワイヤを移動するデータが増えています。

+0

あなたは正しいです、それは重い操作です。過度のデータ転送以外に、エンティティオブジェクトをシリアル化します(ToBsonDocument()はそれを行います)。 1回限りの操作ではOKですが、ループ内で複数回実行する場合のパフォーマンスには重大な影響があります。 – YMC

関連する問題