[英]Mongo DB with C# - document added regardless of transaction
我正在嘗試用我編寫的一個簡單示例測試Mongo DB中新支持的事務。 我正在將Mongo DB版本4.0.5與驅動程序版本2.8.1結合使用。 它只是一個沒有分片/副本的主實例。
我必須在以下代碼中缺少一些基本知識。 我創建一個Mongo客戶端,會話和數據庫,然后啟動一個事務,添加一個文檔並中止該事務。 在此代碼之后,我希望數據庫中沒有任何更改,但已添加了文檔。 調試時,我還可以使用Robo 3T(Mongo客戶端GUI)在InsertOne()
之后看到文檔。
知道我想念什么嗎?
var client = new MongoClient("mongodb://localhost:27017");
var session = client.StartSession();
var database = session.Client.GetDatabase("myDatabase", new MongoDatabaseSettings
{
GuidRepresentation = GuidRepresentation.Standard,
ReadPreference = ReadPreference.Primary,
WriteConcern = new WriteConcern(1,
new MongoDB.Driver.Optional<TimeSpan?>(TimeSpan.FromSeconds(30))),
});
var entities = database.GetCollection<MyEntity>("test");
session.StartTransaction();
// After this line I can already see the document in the db collection using Mongo client GUI (Robo 3T), although I expect not to see it until committing
entities.InsertOne(new MyEntity { Name = "Entity" });
// This does not have any effect
session.AbortTransaction();
編輯:
MongoDB可以作為1節點副本集運行,盡管我不確定獨立副本和1節點副本集有什么區別。 請參閱下面的我的帖子。
無論如何,要使用已啟動的事務,插入代碼必須將會話作為參數接收:
entities.InsertOne(session, new MyEntity { Name = "Entity" });
現在有了這兩個更改,交易就可以進行。
我找到了一個解決方案,盡管不確定會帶來什么后果,也許有人可以指出:通過在mongod中簡單添加以下內容,似乎可以將Mongo DB用作1節點副本集(而不是獨立副本)。 cfg文件:
replication:
replSetName: rs1
同樣,由於下面的鏈接,代碼應使用InsertOne()
的正確重載,該重載將會話作為第一個參數接收(請參見原始文章的編輯內容):
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.