[12屆 鐵人賽] [Day22] Neo4j with C# 程式串接實作 part4 - Neo4jClient 另一個 C# 接 Neo4j 的方法 === ###### tags: `iT鐵人賽` `Neo4j` ## 前情提要 今天應該不會再作弊了吧 就決定寫短一點了 前三篇講了如何用官方提供的 `Neo4j.Driver` 完成與 Neo4j 的連接與資料傳遞 今天要來講講另一個與 Neo4j 連接的套件 同時在 NuGet 上,下載數還比 `Neo4j.Driver` 多的套件 也就是 **[Neo4jClient](https://github.com/DotNet4Neo4j/Neo4jClient)** > 內容警告: > > 本篇文章內容,小弟我之前沒用過,是邊寫文章邊研究的 > 所以說如果寫得很像筆記,或是哪裡怪怪的,請多包含 ## Neo4jClient 好的一樣先從基本的連線開始吧 Code 如下,記得要先去 NuGet 裝 `Neo4jClient` ```csharp var client = new GraphClient(new Uri("http://localhost:7474"), "neo4j", "123456"); await client.ConnectAsync(); var node = await client.Cypher .Match("(n:SQL)") .Return(n => n.As<Sql>()) .ResultsAsync; var nodeList = node.ToList(); ``` 首先前兩行就是基本連線,應該不用多說 最主要在第三行開始 ```csharp var node = await client.Cypher .Match("(n:SQL)") .Return(n => n.As<Sql>()) .ResultsAsync; ``` 有玩過 LINQ 的朋友,對於這個結構一定不陌生 `Neo4jClient` 最屌的就是他將 Cypher 用跟 LINQ 類似的方式呈現 > 至少我目前看起來是這樣覺得 ```csharp string sql = $"MATCH (n:SQL) RETURN n"; ``` 前幾篇還在用 `string` 寫 Cypher `Neo4jClient` 直接提供了看起來比較科學的玩法 用法實際上跟寫 Cypher 的順序一樣 更多的相關用法可以[參考這裡](https://github.com/DotNet4Neo4j/Neo4jClient/wiki/cypher-examples),這邊就不多做贅述 再來是這個部分 ```csharp .Return(n => n.As<Sql>()) ``` 這邊根據大家的直覺,以及前幾篇的內容 直接想到是轉換格式應該是沒有問題的 ```csharp public class Sql { [JsonProperty(PropertyName = "Name")] public string Name { get; set; } } ``` 這邊我的 `class Sql` 寫成這樣 ```csharp [JsonProperty(PropertyName = "Name")] ``` 其中這個 `Attribute` 是用來 mapping `Property` 用的 如果你變數宣告的名稱跟你的 `Property` 一樣 那這行 `Attribute` 可以不用加,建議還是都加啦 ### 一些與 `Neo4j.Driver` 的差異 在資料查詢上看起來確實是方便許多 畢竟用 `string` 寫 Cypher 真的有點刺激 不過,話雖然是這麼說 但我查到現在還是沒找到可以回傳完整 `Node` 或 `Relationship` 資料的方法 > 其實也才查了 2 小時 目前看到的 `Label`、`Property` 一定要分開來讀 這部份對於我來說有那麼點不方便 如果之後有查到方法再來補充吧 |> 另外,寫入資料官網的語法長成這樣 ```csharp var newUser = new User { Id = 456, Name = "Jim" }; graphClient.Cypher .Create("(user:User {newUser})") .WithParam("newUser", newUser) .ExecuteWithoutResults(); ``` 可是我怎麼測都測不過,莫名其妙 --- 漂亮,今天看起來是不用作弊了 原本 `Neo4j.Driver` 是預計要寫 4 篇的 可是發現篇幅好像不太夠,才硬塞了這篇進來 計畫果然充滿變化呢 不過按照計畫,最後還有 4 篇沒東西寫,有點危險ww 下篇 **Neo4j 與 前端技術** 究竟鐵人賽能不能完賽呢,讓我們繼續看下去 --- ## My Source Code [Github Link](https://github.com/flyxiang1206/NeoTest) ## 參考資料 [Neo4j - Using Neo4j from .NET](https://neo4j.com/developer/dotnet/) [Neo4jClient wiki](https://github.com/DotNet4Neo4j/Neo4jClient/wiki) ## 紀錄 撰寫日期:2020/10/06 耗時: 2 小
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up