MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

C# MongoDB:Como mapear corretamente um objeto de domínio?


É possível serializar/desserializar classes onde as propriedades são somente leitura. Se você estiver tentando manter a persistência de seus objetos de domínio ignorante, não desejará usar BsonAttributes para guiar a serialização e, como você apontou, o AutoMapping requer propriedades de leitura/gravação, portanto, você mesmo teria que registrar os mapas de classe. Por exemplo, a 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; } }
}

Pode ser mapeado usando o seguinte código de inicialização:
BsonClassMap.RegisterClassMap<C>(cm => {
    cm.MapIdField("id");
    cm.MapField("x");
});

Observe que os campos privados não podem ser somente leitura. Observe também que a desserialização ignora seu construtor e inicializa diretamente os campos privados (a serialização .NET também funciona dessa maneira).

Aqui está um programa de exemplo completo que testa isso:

http://www.pastie.org/1822994