Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用InsertOneAsync(.NET驱动程序2.0)插入新文档_C#_Asp.net_Mongodb_Mongodb .net Driver_Mongodb Csharp 2.0 - Fatal编程技术网

C# 使用InsertOneAsync(.NET驱动程序2.0)插入新文档

C# 使用InsertOneAsync(.NET驱动程序2.0)插入新文档,c#,asp.net,mongodb,mongodb-.net-driver,mongodb-csharp-2.0,C#,Asp.net,Mongodb,Mongodb .net Driver,Mongodb Csharp 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 } };

在较旧的.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);
MongoClient客户端=新的MongoClient();
var server=client.GetServer();
var db=server.GetDatabase(“foo”);
var collection=db.GetCollection(“bar”);
var document=新的BsonDocument{{{u id',1},{x',2};
收集、保存(文件);
成功了

当我使用新的.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);
var客户端=新的MongoClient(“mongodb://localhost:27017");
var database=client.GetDatabase(“foo”);
var collection=database.GetCollection(“bar”);
var document=新的BsonDocument{{{u id',1},{x',2};
等待收集。插入同步(文档);
错误:“await”运算符只能在异步方法中使用。 考虑用“AsiNC”修饰符标记该方法并更改 它的返回类型为“Task”

参考文献:

我想询问如何使用.Net驱动程序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);            
}
公共类存储库
{
公共静态异步任务插入()
{
var客户端=新的MongoClient(“mongodb://localhost:27017");
var database=client.GetDatabase(“foo”);
var collection=database.GetCollection(“bar”);
var document=新的BsonDocument{{{u id',1},{x',2};
等待收集。插入同步(文档);
}
}
静态void Main(字符串[]参数)
{            
Task tsk=Repository.Insert();
tsk.Wait();
控制台写入线(“状态:+tsk.Status”);
}
结果:等待激活。数据库中没有任何更改。请帮帮我

[更新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);

    }
public异步void Insert()
{
var客户端=新的MongoClient(“mongodb://localhost:27017");
var database=client.GetDatabase(“foo”);
var collection=database.GetCollection(“bar”);
var document=新的BsonDocument{{{u id',1},{x',2};
等待收集。插入同步(文档);
}
您可以在MongoDB C#驱动程序元文件中找到,声明的所有函数都没有
async
,而
wait
关键字需要async,原因如下:

错误:“await”运算符只能在异步方法中使用。考虑用“AsiNC”修饰符标记该方法,并将其返回类型改为“任务”。

您只需删除
wait
关键字即可。它适用于我

var client=new MongoClient(“mongodb://localhost:27017");
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();
var database=client.GetDatabase(“foo”); var collection=database.GetCollection(“bar”); var document=新的BsonDocument{{{u id',1},{x',2}; 任务任务=collection.InsertOneAsync(文档); task.Wait();

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

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


看看这篇关于Wait async的帖子,我已经按照你说的那样试过了。Repository respository=新存储库();Task tsk=respository.Insert();控制台写入线(“状态:+tsk.Status”);结果:等待激活。数据库中没有任何更改!我不知道为什么。我以前从未使用过异步或任务,所以我不知道为什么。你能帮我吗?是的,但是做一件事,请确保你的连接工作正常我的意思是你可以从mongo获取数据?因为async和await什么都不是,但它只是释放您的主线程供您帮助!我加上:tsk.Wait();。成功了。隐马尔可夫模型!我真的不擅长同步。