繁体   English   中英

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

[英]Insert new document using InsertOneAsync (.NET Driver 2.0)

在较旧的.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);

有效。

当我使用新的.Net Driver 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);

错误:'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);            
}

结果:WaitingForActivation。 数据库中没有任何变化。 请帮我!

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

你的方法应该是这样的

 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);

    }
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 } };
Task task = collection.InsertOneAsync(document);
task.Wait();

//从此处开始,您的记录/文档应该在MongoDB中。

您可以在MongoDB C#驱动程序元文件中找到所有声明没有async函数,这是await关键字所要求的,并导致:

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

您只需删除await关键字即可。 这个对我有用

你最初没有在数据库上看到任何东西的原因是因为你没有等待(等待) Insert方法完成,你后来通过调用task.Wait() 正如您在提供的答案的链接中的注释中所提到的那样,调用.Wait()会导致死锁。 相反,您应该调用await Repository.Insert()

看看这篇关于await-async的帖子http://blog.stephencleary.com/2012/02/async-and-await.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM