Как динамически передать тип объекта в <>? - PullRequest
0 голосов
/ 30 марта 2020

Я хочу использовать метод для создания пустого документа в коллекции и получения его идентификатора из MongoDB. Я думал об использовании одного и того же метода для двух разных типов типов объектов. Например:

public async Task<string> CreateObject (object x) 
{ 
  Type objectType = x.GetType();
  _context.Database.
  GetCollection<objectType>("CollectionName").
  InsertOneAsync(x); 

  return x; 

 }

Но это не работает, так как GetCollection <> будет работать только с объектами или моделями, которые уже определены в приложении, и отказывается принимать тип объекта динамически в соответствии с моим кодом. Я не знаю, если это плохое программирование, но возможно ли достичь этого или просто глупо попробовать это?

Спасибо:)

Ответы [ 3 ]

1 голос
/ 31 марта 2020

Почему вы не можете использовать что-то типа dynamic?

_context.Database.
  GetCollection<dynamic>("CollectionName").
  InsertOneAsync(x); 

Или вы также можете использовать класс BsonDocument.

1 голос
/ 30 марта 2020

Ну, я не совсем уверен, чего вы пытаетесь достичь, но что, если вы сделаете свой метод обобщенным c, например

public async Task<string> CreateObject<T> (T x) 
{ 
  _context.Database.
  GetCollection<T>(nameof(T)).InsertOneAsync(x); 
  return x; 
}
0 голосов
/ 02 апреля 2020

Если вы просто хотите добавить пустой документ в коллекцию и получить идентификатор, которому его назначил сервер базы данных, вы можете сделать следующее:

var client = new MongoClient();
var database = client.GetDatabase("test");
await client.DropDatabaseAsync(database.DatabaseNamespace.DatabaseName);
var collection = database.GetCollection<BsonDocument>("collection");

var newDocument = new BsonDocument();
await collection.InsertOneAsync(newDocument);

var id = newDocument["_id"].AsObjectId;

Console.WriteLine($"_id is '{id}'");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...