今天搭高鐵,有個妹子在車廂內打翻飲料
飲料還流的整個車廂都是,百香果的味道香到不行
上一篇簡單的示範了 C# 接 Neo4j 的基本連線與測試
今天來細講一下 IDriver 底下 AsyncSession() 回傳的 IAsyncSession 的功能吧
上一篇有過這個 Function
string sql = $"CREATE (n:Greeting{{message:'{message}'}}) RETURN n.message + ' from node : '+ id(n)";
var greeting = await session.WriteTransactionAsync(async tx =>
{
var result = await tx.RunAsync(sql);
return await result.ToListAsync(r => r[0].As<string>());
});
這邊就實際上的內容很簡單
就是在 Write 模式下開啟一段交談,再回傳資料而已
Write 模式下就包含修改刪除等都可以使用,廢話
值得一提的是 WriteTransactionAsync 會自動 Commit 你的修改內容
相關細節等等在 BeginTransactionAsync 會講到
關於這個部分
result.ToListAsync(r => r[0].As<string>())
屬於回傳資料的內容,下一篇會詳細講
先下一個基本的內容,跟 WriteTransactionAsync 大同小異就是了
string sql = $"MATCH (n:Greeting{{message:'{message}'}}) RETURN n.message + ' from node : '+ id(n)";
var greeting = await session.ReadTransactionAsync(async tx =>
{
var result = await tx.RunAsync(sql);
return await result.ToListAsync(r => r[0].As<string>());
});
跟剛剛的 WriteTransactionAsync 為一的不同是
這邊使用的是 Read 模式
在這個模式下 CREATE、SET、DELETE 等功能都是不會工作的
如果你下了這類的語法,在 Neo4j Server 執行的時候會直接擋住
然後回傳錯誤
如果你想要抓到錯誤的話,你可以嘗試調用 result.FetchAsync()
你就會抓到底下這行錯誤
Writing in read access mode not allowed. Attempted write to internal graph 0 (neo4j)
這邊這個就稍微複雜一點了
string sql = $"CREATE (n:Greeting{{message:'{message}'}}) RETURN n.message + ' from node : '+ id(n)";
//建立交談
var session = _driver.AsyncSession();
//開始交談
var transaction = await session.BeginTransactionAsync();
//執行 cypher 語法
var echo = await transaction.RunAsync(sql);
//取得回傳
var result = await echo.ToListAsync(r => r[0].As<string>());
//提交變更
await transaction.CommitAsync();
await session.CloseAsync();
跟之前不一樣的地方是,多這行
await transaction.CommitAsync();
對於 BeginTransactionAsync 來說,所有的操作的是假的
概念跟 Git 有點像,在你沒 Commit 之前,你的變更跟沒變跟一樣
所以說用 BeginTransactionAsync
你可以在不動到 DB 資料的情況下,取得調整後的內容
只要你沒下 CommitAsync(),你怎麼改都不會實際動到資料庫
上一篇忘記提到
var session = _driver.AsyncSession();
await session.CloseAsync();
建立 session 之後,要把這個 session 關了,完成一個完整流程
一個作弊
為什麼感覺這篇有點水阿 @@
明天要早點開始寫
最近越來越不會估每篇文的完成所需時間了
有夠母湯

看著這個,總覺得有點心虛呢w
下篇 Neo4j with C# 程式串接實作 part3 - 回傳資料解析
究竟鐵人賽能不能完賽呢,讓我們繼續看下去
排版好看的版本同步更新在我的 HackMD