Драйвер не знает, какой документ находится в коллекции, поэтому он принимает параметр типа T
.Сам MongoDB не знает, как документы в базе данных соответствуют типам в вашем приложении.
Невозможно подключиться к «универсальному» развертыванию MongoDB и просто обнаружить коллекции и типы вих.Это код, который вам нужно написать, и, вероятно, он не сработает, так как это будет что-то вроде проб и ошибок.
Если вы просто пытаетесь создать фабричный тип, вам нужно будетсоздайте вспомогательный список коллекций перед вызовом GetCollection<T>
.
Вы можете попробовать использовать имя типа в качестве имени коллекции.Это сделает имя коллекции повторяемым (если имя типа не изменено).Но я никогда не проверял его, и у него могут быть некоторые отличительные черты в реальном мире.
public class MyDatabase
{
private readonly IMongoClient _client;
public MyDatabase(string connectionString)
{
_client = new MongoClient(connectionString);
}
public IMongoCollection<T> GetCollection<T>()
{
var db = _client.GetDatabase("dbName");
return db.GetCollection<T>(typeof(T).Name);
}
}
Если вы предпочитаете, чтобы имена коллекций были во множественном числе, то вам может помочь что-то вроде Humanizer .
Я обычно предпочитаю создавать тип, у которого коллекции являются полями в классе.Например:
public class MyDatabase
{
private readonly IMongoClient _client;
public IMongoCollection<Foo> Foos { get; }
public IMongoCollection<Bar> Bars { get; }
public MyDatabase(string connectionString)
{
_client = new MongoClient(connectionString);
var db = _client.GetDatabase("myDb");
Foos = db.GetCollection<Foo>("foos");
Bars = db.GetCollection<Bar>("bars");
}
}