Um IMemeberMapConvention verwenden zu können, müssen Sie sicherstellen, dass Sie Ihre Konventionen deklarieren, bevor der Zuordnungsprozess stattfindet. Oder löschen Sie optional vorhandene Zuordnungen und erstellen Sie neue.
Die folgende Reihenfolge ist beispielsweise die richtige Reihenfolge, um eine Konvention anzuwenden:
// 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!"},
});
So wurde diese Beispielkonvention definiert:
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
}
Dies sind die Ergebnisse, die herauskamen, als ich diese Probe durchführte. Sie konnten sehen, dass die Text-Eigenschaft als „NotText“ gespeichert wurde: