Pillowsharp 是一個函式庫,旨在以作用 .NET Core 編寫的 Apache CouchDB 的客戶端。目標是提供可以開箱即用的東西,無需配置或大量程式碼。 Pillowsharp 利用 .NET 的async
和await
功能,允許對資料庫的無阻塞請求。
若要建置庫並執行單元測試,請按照以下說明操作:
curl -X PUT localhost:5984/_config/admins/admin -d '"admin"'
新增沙發管理員library/nuget
了請注意:如果您使用的是 CouchDB 2.X,則配置開發環境有一些更改,您可以使用 dev_couch2_setup.sh/bat 檔案。它將使用單元測試中使用的預設管理員配置單一節點實例。
如果您在步驟 5(執行測試案例)中遇到問題,請檢查 CouchSettings.cs 文件,如果您的 CouchDB 實例的所有配置都正確。如果您仍有問題或疑問,請提出問題或與我聯絡。
您可以克隆存儲庫並運行相關的構建腳本(請參閱設置部分)或從 nuget.org 下載構建
與 CouchDB 的所有通訊都使用 PillowClient 類,您可以像這樣產生一個新實例:
var client = = new PillowClient ( new BasicCouchDBServer ( "http://127.0.0.1:5984" ) ) ;
上面的範例將使用與 CouchDB 的匿名通訊(不需要用戶,預設 CouchDB 設定)。若要透過登入使用 PillowSharp,以下用戶端設定是正確的:
var client = new PillowClient ( new BasicCouchDBServer ( "http://127.0.0.1:5984" , new CouchLoginData ( "admin" , "admin" ) , ELoginTypes . TokenLogin ) ) ;
請注意:您需要按照此處所述設定登入類型
某些 Pillow 功能的範例用法位於儲存庫的範例專案中。
Pillow 允許您使用任何 C# 類別作為模型來從 CouchDB 發送和接收。如果您想讓您的生活變得更輕鬆,請選擇CouchDocument
。這允許 Pillow 的所有通訊功能自動設定 ID、修訂和刪除標誌。
public class TestDocument : CouchDocument
{
public int Fu { get ; set ; }
public string Bar { get ; set ; }
}
例如,如果在更新呼叫中使用上述模組,Pillow 將更新物件內的修訂號。
所有呼叫都接受一個參數來定義您要與之通訊的資料庫。如果您想避免在每次呼叫時設定此項,您也可以將其設定為客戶端的參數:
client . ForcedDatabaseName = "pillow" ;
另一種方法是為每個模型設定資料庫:
[ DBName ( "pillow" ) ]
public class TestDocument : CouchDocument
{
public int Fu { get ; set ; }
public string Bar { get ; set ; }
}
可以使用所有三種方式來設定資料庫,Pillow 會按以下順序使用它們:
另請參閱範例項目。
if ( ! await client . DbExists ( "pillow" ) )
{
if ( await client . CreateNewDatabase ( "pillow" ) )
Console . WriteLine ( "Database pillow created" ) ;
}
下面的範例假設Person
類別繼承CouchDocument
並使用[DBName("pillow")]
屬性。也可以在呼叫的結果物件中檢查新版本和 id。
person = new Person ( ) { Name = "Dev" , LastName = "Owl" , Role = "Developer" } ;
var result = await client . CreateANewDocument ( person ) ;
if ( result . Ok )
{
Console . WriteLine ( $ "Document created with id: { person . ID } and Rev: { person . Rev } " ) ;
}
透過 id 和可選的修訂版取得單一文件:
var result = await client . GetDocument < Person > ( ID = "developer" ) ;
使用 CouchDB 中的所有文件端點:
await client . GetAllDocuments ( Person . GetType ( ) ) ;
您也可以透過多種方式使用 PillowClient 取得文件清單:
下面的範例假設Person
類別繼承CouchDocument
並使用[DBName("pillow")]
屬性。此呼叫的重要之處在於將現有 ID 傳送到 CouchDB。
var result = await client . DeleteDocument ( person ) ;
下面的範例假定Person
類別繼承CouchDocument
並使用[DBName("pillow")]
屬性。
只需提供您想要附加到文件的文件的路徑。
var result = await client . AddAttachment ( person , "fav.image" , "sleepy_owl.JPG" ) ;
結果將會是一個 byte[]
var result = await client . GetAttachement ( person , "fav.image" ) ;
var result = await client . DeleteAttachment ( person , "fav.image" ) ;
PillowSharp 支援:
var designDoc = new CouchDesignDocument ( ) ;
designDoc . ID = "testDesignDoc" ;
designDoc . AddView ( "test" , "function (doc) {emit(doc._id, 1);}" ) ;
designDoc . AddView ( "testReduce" , "function (doc) {emit(doc._id, 1);}" , "_count" ) ;
var result = await client . UpsertDesignDocument ( designDoc ) ;
var dbDocument = await client . GetDesignDocument ( ID ) ;
var result = await client . GetView < dynamic > ( ID , "viewname" , new [ ] { new KeyValuePair < string , object > ( "reduce" , "false" ) } ) ;
您可以要求 CouchDB 為您產生 ID,PillowSharp 用戶端可以自動為新文件產生 ID。所有可以在PillowClientSettings
內部配置的預設設定是:
public class PillowClientSettings
{
public bool AutoGenerateID { get ; set ; } = true ;
public bool UseCouchUUID { get ; set ; } = false ;
public bool IgnoreJSONNull { get ; set ; } = true ;
}
要產生 CouchDB UUID,您可以使用以下呼叫:
var uuidResponse = await client . GetManyUUIDs ( AmountOfUUIDs : 10 ) ;
foreach ( var id in uuidResponse . UUIDS ) {
Console . WriteLine ( id ) ;
}