MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

C# MongoDB :Comment mapper correctement un objet de domaine ?

Il est possible de sérialiser/désérialiser des classes dont les propriétés sont en lecture seule. Si vous essayez d'ignorer la persistance de vos objets de domaine, vous ne voudrez pas utiliser BsonAttributes pour guider la sérialisation, et comme vous l'avez souligné, AutoMapping nécessite des propriétés de lecture/écriture, vous devrez donc enregistrer vous-même les cartes de classe. Par exemple, la classe :

public class C {
    private ObjectId id;
    private int x;

    public C(ObjectId id, int x) {
        this.id = id;
        this.x = x;
    }

    public ObjectId Id { get { return id; } }
    public int X { get { return x; } }
}

Peut être mappé à l'aide du code d'initialisation suivant :

BsonClassMap.RegisterClassMap<C>(cm => {
    cm.MapIdField("id");
    cm.MapField("x");
});

Notez que les champs privés ne peuvent pas être en lecture seule. Notez également que la désérialisation contourne votre constructeur et initialise directement les champs privés (la sérialisation .NET fonctionne également de cette façon).

Voici un exemple de programme complet qui teste ceci :

http://www.pastie.org/1822994