[英]Use CouchDB with .NET
.NET(托管代碼)可以讀寫 CouchDB 嗎?
我想構建我的項目的一部分,使用 CouchDB 進行文檔管理
這是一個遲到的答案,但請查看Hammock 。 它很活躍,很快就會在幾個項目中投入生產使用,並且正在接收定期更新和修復。 除了基本的對象持久性,Hammock 還為您提供:
Repository<>
類,有助於將您的查詢/視圖(即 _Design 文檔)與您的 c# 應用程序代碼結合在一起。 存儲庫負責維護 _design 文檔,這有助於避免 CouchDB 視圖感覺像存儲的 procs 。看看SharpCouch實用程序類。
它是 CouchDB HTTP API 的簡單包裝類。
鑒於您通常通過 REST 和 JSON 與 CouchDB 進行通信,我想使用JSON.NET和普通的 WebClient/HttpWebRequest 類來做到這一點不會太難。 我自己沒試過,請注意...
游戲有點晚了,但是有一個開源項目,用於在異步 HTTP 客戶端上用 C# 編寫的新驅動程序,默認情況下,Newtonsoft 的 JSON.Net 用於序列化(可切換)。 MyCouch - 用於 .Net 的簡單異步 CouchDb 客戶端。
這里有一篇入門文章: http : //danielwertheim.se/get-up-and-running-with-couchdb-and-c-using-mycouch-on-windows/
關注Ottoman一個用 C# 編寫的開源項目。 它仍在大力開發中,但我想指出它是規划階段項目的一個選項。 當它接近完成時,我會更新這篇文章。 您可以在github上查看源代碼。 閱讀自述文件以查看示例以及當前版本的可能性。
這是一個相當新的項目,但非常活躍。 當然,我也有點偏激。 ;-)
還可以看看divan - cdb api 的輕量級包裝器
我已經將 JSON.NET 與 MS REST 入門工具包的 http 客戶端類結合使用,以集成到 CouchDB 中,並且效果非常好。
如果您想要最新狀態,CouchDB 的 wiki 有一個 C# API 列表(及其功能): http : //wiki.apache.org/couchdb/Getting_started_with_C%23
選項(按最新更新排序):
WDK10 中包含的 CouchDB 的 .NET API 非常易於使用,您可以從http://code.google.com/p/skitsanoswdk/獲取它,它非常靈活,允許您處理對象和純 json 級別的數據。
再一個 - CouchDBClient: https : //github.com/ttutisani/CouchDBClient
免責聲明:我是作者。
我試圖讓 CouchDBClient 更友好地使用自定義對象 - 這就是應用程序通常存儲在數據庫中的內容。
當我開始編寫這個框架時,我發現和嘗試的所有其他框架都給人留下了非標准化方法簽名的印象(使用各種約定命名並且更難猜測它們做了什么),而不是統一接口(一些圍繞字符串文檔的操作,而json 文檔周圍的其他人),不是很靈活(有些只使用字符串,有些只使用對象),或者不是很抽象(必須首先了解 CouchDB REST API 才能正確使用它們)。 我假設並希望它們從那時起就成熟了,但至少這個設計符合我的口味。
我希望 CouchDBClient 可以創建一種舒適的抽象感覺,而不必過多擔心底層 API,而只關注您的應用程序,以及它如何存儲和檢索所需的對象。
我知道我很晚了,但也許這對未來有幫助。 在過去的幾年里,我為 CouchDB 開發了一個庫。
最大的特點是將 LINQ(類似於 EF Core)轉換為 mango 查詢,還有 DB Changes Feed、Views 和 Table Splitting。
https://github.com/matteobortolazzo/couchdb-net
var skywalkers = await context.Rebels
.Where(r =>
r.Surname == "Skywalker" &&
(
r.Battles.All(b => b.Planet == "Naboo") ||
r.Battles.Any(b => b.Planet == "Death Star")
)
)
.OrderByDescending(r => r.Name)
.ThenByDescending(r => r.Age)
.Take(2)
.Select(
r => r.Name,
r => r.Age
})
.ToListAsync();
查看放松http://www.sharplearningcurve.com/wiki/Symbiote-Relax.ashx 。 Relax 是“CouchDB 的(優秀的)RESTful API 的.Net API 抽象。它包括用於文檔交互的基於存儲庫的接口和用於管理類型任務的服務器控制器。”
我推薦 CouchDb.Repository.Helper 包。 它是全面的,允許您根據變量的值或對象的屬性解析動態參數,在 XML 文件中創建查詢。
我有同樣的需求,在評估了可用的選項后,為了滿足我的應用程序的要求,我創建了這些對我有很大幫助的組件,也許它們可以幫助你和其他人。 我明確表示我無意在這里宣傳自己,只是分享一些可能有用的東西。
如何配置和使用它的詳細解釋在github上。
使用 mango-querie 檢索文檔的示例:
IList<User> users;
var sts = new List<String> { "ACTIVE", "LOCKED" };
using (UserRepository db = new UserRepository())
{
var query = db.FindOf("list-status", new { id = "OwnerIdloop.user.7", statuses = sts });
users = db.List<User>(query);
}
Array.ForEach(users.ToArray(), Console.WriteLine);
添加文檔的示例:
User user = createUser("email@email.com");
using (UserRepository db = new UserRepository())
{
var result = db.Insert<User>(user); // add document and return instance changed with operation revision id
Console.WriteLine(result.Revision);
}
更改文件的示例:
using (UserRepository db = new UserRepository())
{
// Load document data by ID
var user = db.Get<User>("email@email.com");
user.Name = user.Name + "::CHANGED";
var result = db.Update<User>(user); // update document and return instance changed with operation revision id
Console.WriteLine(result.Revision);
}
刪除文檔的示例:
using (UserRepository db = new UserRepository())
{
// Load document data by ID
var user = db.Get<User>("email@email.com");
var result = db.Delete<User>(user); // delete document from database. Return true case sucess or false case not deleted
Console.WriteLine($"Sucesso: {result}");
}
希望這可以幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.