Таким образом, _db, являющийся нулевым, и отладочный прогон, не выдающий никакой ошибки, кроме "_db is null ..." (да, это не полезно), мне пришлось довольно долго использовать Google для этого.
После долгих поисков я наконец нашел код, который дал ключ к окончательному решению моей проблемы.На самом деле это была не связь, а попытка получить данные.Вы ДОЛЖНЫ обернуть все свои методы контроллера и dataRepo / dataContext в асинхронные задачи .
Вот рабочий класс UserData для тех, кто ищет это позже ...
UserData.cs
public class UserData
{
private readonly IMongoClient _mongoClient;
private readonly IMongoDatabase _database;
private readonly IMongoCollection<User> _collection;
public UserData(string mongoUri)
{
_mongoClient = new MongoClient(mongoUri);
_database = _mongoClient.GetDatabase("easymessagebus");
_collection = _database.GetCollection<User>("user");
}
public async Task<IEnumerable<User>> GetAll()
{
return await _collection.Find(Builders<User>.Filter.Empty).ToListAsync();
}
...
UserController.cs
[ApiController]
[Produces("application/json")]
[Route("api/user")]
public class UserController : ControllerBase
{
private readonly UserData userData = null;
public UserController(string mongoUri)
{
userData = new UserData(mongoUri);
}
// GET api/values
[HttpGet]
public async Task<ActionResult<IEnumerable<string>>> Get()
{
var values = await userData.GetAll();
return new JsonResult(values);
}
...
ПРИМЕЧАНИЕ. Убедитесь, что ваш appsettings.json содержит правильную строку MongoDb Uri.Кроме того, убедитесь, что ваш Startup.cs передает URI MongoDb в конструктор контроллера, например ...
Startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
var mongoUri = Configuration["MongoUri_Atlas"];
if (!string.IsNullOrWhiteSpace(mongoUri))
{
services.AddSingleton<string>(mongoUri);
}
}
...