MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

MongoDb serializza tipi generici (classi)

Puoi certamente archiviare tutti i tuoi documenti in una raccolta, tuttavia è probabilmente più facile e più pulito a lungo termine archiviare solo un tipo in una raccolta (da una prospettiva C#). Puoi farlo creando una classe con un metodo di estensione su MongoDatabase.

public static class MyDatabase
{
    public static MongoCollection<T> GetCollection<T>(this MongoDatabase db)
    {
        var name = typeof(T).Name;
        return db.GetCollection<T>(name);
    }
}

Quindi puoi semplicemente chiamare GetCollection con il tuo tipo e il nome sarà nascosto dal tuo codice generale. Puoi anche creare qualcosa di simile per astrarre le cose un po' di più:

public class MyDatabase
{
    private MongoDatabase _db;

    public MyDatabase(MongoDatabase db)
    {
        _db = db;
    }

    public MongoCollection<object> Objects
    {
        get
        {
            return _db.GetCollection<object>();
        }
    }
}

Con questo puoi semplicemente fare

var client = new MongoClient();
var server = client.GetServer();
var db = server.GetDatabase("MyDb");
var myDb = new MyDatabase(db);
myDb.Objects.Find();

Questo Find mapperà per essere eseguito contro gli Objects collection, sostituisci semplicemente <object> con il tuo tipo e dai un nome alla collezione.