19

C#で MongoDBConventionPackを使用する方法 次のコードがあります。

MongoDatabase Repository = Server.GetDatabase(RepoName);
this.Collection = Repository.GetCollection<T>(CollectionName);
var myConventions = new ConventionPack();
myConventions.Add(new CamelCaseElementNameConvention());

コンベンション パックは自動的に this.Collection にアタッチされますか?
新しいオブジェクトをロードすると、この場合のように自動的に永続化されますか?
クラス宣言にタグを追加する必要がありますか (データ コントラクトなど)?

4

1 に答える 1

28

パックを次の場所に登録する必要がありますConventionRegistry

var pack = new ConventionPack();
pack.Add(new CamelCaseElementNameConvention());
ConventionRegistry.Register("camel case",
                            pack,
                            t => t.FullName.StartsWith("Your.Name.Space."));

これをグローバルに適用する場合は、最後のパラメーターを のような単純なものに置き換えることができますt => true

シリアライズとデシリアライズを行う作業サンプル コード (ドライバー 1.8.20、mongodb 2.5.0):

using System;
using System.Linq;
using MongoDB.Bson;
using MongoDB.Bson.Serialization.Conventions;
using MongoDB.Driver;

namespace playground
{
    class Simple
    {
        public ObjectId Id { get; set; }
        public String Name { get; set; }
        public int Counter { get; set; }
    }

    class Program
    {
        static void Main(string[] args)
        {
            MongoClient client = new MongoClient("mongodb://localhost/test");
            var db = client.GetServer().GetDatabase("test");
            var collection = db.GetCollection<Simple>("Simple");
            var pack = new ConventionPack();
            pack.Add(new CamelCaseElementNameConvention());
            ConventionRegistry.Register("camel case", pack, t => true);
            collection.Insert(new Simple { Counter = 1234, Name = "John" });
            var all = collection.FindAll().ToList();
            Console.WriteLine("Name: " + all[0].Name);
        }
    }
}
于 2013-10-22T15:13:44.857 に答える