使用 InsertOneAsync (.NET Driver 2.0) 插入新文档

Han*_*ana 5 c# asp.net mongodb mongodb-csharp-2.0 mongodb-.net-driver

在旧的 .Net API 版本中:

MongoClient client = new MongoClient();
var server = client.GetServer();
var db = server.GetDatabase("foo");
var collection = db.GetCollection<BsonDocument>("bar");
var document = new BsonDocument { { "_id", 1 }, { "x", 2 } };
collection.Save(document);
Run Code Online (Sandbox Code Playgroud)

有效。

当我使用新的 .Net 驱动程序 2.0 时:

var client = new MongoClient("mongodb://localhost:27017");
var database = client.GetDatabase("foo");
var collection = database.GetCollection<BsonDocument>("bar");

var document = new BsonDocument { { "_id", 1 }, { "x", 2 } };
await collection.InsertOneAsync(document);
Run Code Online (Sandbox Code Playgroud)

错误:“await”运算符只能在异步方法中使用。考虑使用“async”修饰符标记此方法并将其返回类型更改为“Task”。

参考文献:

2.0 .NET 驱动程序简介

读写

我想问如何使用.Net Driver 2.0插入新文档。谢谢。

[更新1]我尝试实施:

public class Repository
{
    public static async Task Insert()
    {
        var client = new MongoClient("mongodb://localhost:27017");
        var database = client.GetDatabase("foo");
        var collection = database.GetCollection<BsonDocument>("bar");

        var document = new BsonDocument { { "_id", 1 }, { "x", 2 } };
        await collection.InsertOneAsync(document);
    }
}

static void Main(string[] args)
{            
       Task tsk = Repository.Insert();
       tsk.Wait();
       Console.WriteLine("State: " + tsk.Status);            
}
Run Code Online (Sandbox Code Playgroud)

结果:等待激活。数据库中没有任何变化。请帮我!

[更新2(已解决)]:添加 tsk.Wait(); 有效 !感谢这篇文章:我如何同步运行异步任务方法?

Dha*_*tel 3

你的方法应该是这样的

 public async void Insert()
    {
         var client = new MongoClient("mongodb://localhost:27017");
        var database = client.GetDatabase("foo");
        var collection = database.GetCollection<BsonDocument>("bar");

        var document = new BsonDocument { { "_id", 1 }, { "x", 2 } };
        await collection.InsertOneAsync(document);

    }
Run Code Online (Sandbox Code Playgroud)