【问题标题】:Using MongoDB as Service in ASP.NET Core Blazor在 ASP.NET Core Blazor 中使用 MongoDB 作为服务
【发布时间】:2020-10-07 09:50:57
【问题描述】:

所以我创建了以下 MongoDBService:

public class MongoDBService
{
    private const String CONNECTION_STRING = "mongodb://localhost:27017";
    private const String DATABASE_NAME = "TestingTesting";
    private readonly MongoClient _Client;

    public MongoDBService()
    {
        _Client = new MongoClient(CONNECTION_STRING);
    }

    public IMongoCollection<T> GetCollection<T>()
    {
        return _Client.GetDatabase(DATABASE_NAME).GetCollection<T>(typeof(T).Name);
    }
}

我已在我的 asp.net core Startup.cs 中将 MongoDBService 设置为服务:

services.AddSingleton<MongoDBService>();

然后我尝试通过将服务注入 .razor 页面来使用该服务:

@inject Project.Services.MongoDBService

我也在启动我的 MongoDBService 实例:

Project.Services.MongoDBService mongo = new Services.MongoDBService();

但是当我尝试使用它时,我在 FindAsync() 方法下得到一条红色波浪线:

async Task GetAllClocks()
{
    MongoDB.Driver.FilterDefinition<Project.Data.Clock> filter = MongoDB.Driver.Builders<Project.Data.Clock>.Filter.Empty;

    MongoDB.Driver.IMongoCollection<Project.Data.Clock> cursor = await mongo.GetCollection<Project.Data.Clock>().FindAsync(filter);
}

错误是:

CS0411:无法从用法推断方法“IMongoCollection.FindAsync(FilterDefinition, FindOptions, CancellationToken)”的类型参数。尝试指定类型

我已经在谷歌上搜索了一段时间,虽然听起来我要让编译器决定使用什么类型,但我确定我明确指定了 Project.Data.Clock 类型。绝对难倒。有什么想法吗?

【问题讨论】:

  • 猜测:FindOptions 需要两个类型参数,而您只提供一个。如果你想返回一个时钟对象,试试 FindOptions.
  • 嘿 Ricardo,你说得对,我创建了新的 FindOptions 实例并将其作为参数传递给 FindAsync 方法。奇怪的是我以前从来没有这样做过,这是我第一次遇到这个错误。

标签: c# asp.net-core blazor


【解决方案1】:

FindOptions 需要两个类型参数,而您只提供一个。如果您希望返回 Clock 对象,请尝试 FindOptions&lt;Clock, Clock&gt;

【讨论】:

  • 嗨,里卡多,谢谢。知道为什么在这种情况下我必须传递 FindOptions 参数吗?通常 FilterDefintiion.Empty 足以满足 FindAsync()
  • 在我的机器上,使用 NuGet 包 2.11.2,我不需要传递 FindOptions 参数。你用的是什么版本?我所拥有的是:client.GetDatabase("").GetCollection("").FindAsync(filter)
  • 我的 MongoDB.Driver 和 MongoDB.Driver.Core 也是 2.11.2!很奇怪。
猜你喜欢
  • 1970-01-01
  • 2020-09-30
  • 2019-04-19
  • 1970-01-01
  • 2021-01-22
  • 1970-01-01
  • 2020-03-20
  • 2020-03-09
  • 2021-04-20
相关资源
最近更新 更多