Untuk menggunakan IMemeberMapConvention, Anda harus memastikan untuk mendeklarasikan konvensi Anda sebelum proses pemetaan berlangsung. Atau secara opsional lepaskan pemetaan yang ada dan buat yang baru.
Misalnya, berikut ini adalah urutan yang benar untuk menerapkan konvensi:
// first: create the conventions
var myConventions = new ConventionPack();
myConventions.Add(new FooConvention());
ConventionRegistry.Register(
"My Custom Conventions",
myConventions,
t => true);
// only then apply the mapping
BsonClassMap.RegisterClassMap<Foo>(cm =>
{
cm.AutoMap();
});
// finally save
collection.RemoveAll();
collection.InsertBatch(new Foo[]
{
new Foo() {Text = "Hello world!"},
new Foo() {Text = "Hello world!"},
new Foo() {Text = "Hello world!"},
});
Berikut cara konvensi contoh ini didefinisikan:
public class FooConvention : IMemberMapConvention
private string _name = "FooConvention";
#region Implementation of IConvention
public string Name
{
get { return _name; }
private set { _name = value; }
}
public void Apply(BsonMemberMap memberMap)
{
if (memberMap.MemberName == "Text")
{
memberMap.SetElementName("NotText");
}
}
#endregion
}
Ini adalah hasil yang keluar ketika saya menjalankan sampel ini. Anda dapat melihat properti Text akhirnya disimpan sebagai "NotText":