За да използвате IMemeberMapConvention, трябва да се уверите, че сте декларирали своите конвенции, преди да започне процесът на картографиране. Или по желание отстранете съществуващите съпоставяния и създайте нови.
Например, следният е правилният ред за прилагане на конвенция:
// 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!"},
});
Ето как е дефинирана тази примерна конвенция:
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
}
Това са резултатите, които излязоха, когато пуснах тази извадка. Можете да видите, че свойството Text в крайна сметка е запазено като „NotText“: