For at bruge IMemeberMapConvention skal du sørge for at deklarere dine konventioner, inden kortlægningsprocessen finder sted. Eller slip eventuelt eksisterende kortlægninger og opret nye.
For eksempel er følgende den korrekte rækkefølge for at anvende en konvention:
// 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!"},
});
Sådan blev denne eksempelkonvention defineret:
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
}
Dette er resultaterne, der kom frem, da jeg kørte denne prøve. Du kunne se tekstegenskaben endte med at blive gemt som "NotText":