今天搭高鐵,有個妹子在車廂內打翻飲料
飲料還流的整個車廂都是,百香果的味道香到不行
上一篇簡單的示範了 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