Pillowsharp ist eine Bibliothek, die als Client für Apache CouchDB verwendet werden soll und in .NET Core geschrieben ist. Ziel ist es, etwas anzubieten, das sofort einsatzbereit ist, ohne dass eine Konfiguration oder viel Code erforderlich ist. Pillowsharp nutzt die async
und await
Funktion von .NET, die keine blockierenden Anfragen an die Datenbank zulässt.
Um die Bibliothek zu erstellen und die Komponententests auszuführen, befolgen Sie bitte die folgenden Anweisungen:
curl -X PUT localhost:5984/_config/admins/admin -d '"admin"'
verwenden.library/nuget
verwendenBitte beachten Sie: Wenn Sie CouchDB 2.X verwenden, gibt es einige Änderungen an der Konfiguration einer Entwicklungsumgebung. Sie können die Datei dev_couch2_setup.sh/bat verwenden. Es wird eine einzelne Knoteninstanz mit dem Standardadministrator konfiguriert, der auch in den Komponententests verwendet wird.
Falls in Schritt 5 (Ausführen von Testfällen) Probleme auftreten, überprüfen Sie bitte die Datei CouchSettings.cs, ob alle Konfigurationen für Ihre CouchDB-Instanz korrekt sind. Wenn Sie weiterhin Probleme oder Fragen haben, eröffnen Sie bitte ein Problem oder kontaktieren Sie mich.
Sie können entweder das Repository klonen und das zugehörige Build-Skript ausführen (siehe Abschnitt „Setup“) oder einen Build von nuget.org herunterladen
Die gesamte Kommunikation mit CouchDB verwendet die PillowClient-Klasse. Sie können eine neue Instanz wie folgt generieren:
var client = = new PillowClient ( new BasicCouchDBServer ( "http://127.0.0.1:5984" ) ) ;
Das obige Beispiel verwendet anonyme Kommunikation mit CouchDB (kein Benutzer erforderlich, Standard-CouchDB-Setup). Um PillowSharp mit einem Login zu verwenden, wäre das folgende Client-Setup korrekt:
var client = new PillowClient ( new BasicCouchDBServer ( "http://127.0.0.1:5984" , new CouchLoginData ( "admin" , "admin" ) , ELoginTypes . TokenLogin ) ) ;
Bitte beachten Sie: Sie müssen den Anmeldetyp wie hier beschrieben festlegen
Beispielverwendungen für einige Pillow-Funktionen finden Sie im Beispielprojekt im Repository.
Mit Pillow können Sie jede C#-Klasse als Modell zum Senden und Empfangen von CouchDB verwenden. Wenn Sie Ihr Leben ein wenig einfacher machen möchten, bietet Ihnen CouchDocument
die Möglichkeit. Dadurch können alle Kommunikationsfunktionen von Pillow die ID-, Revisions- und Löschmarkierung automatisch setzen.
public class TestDocument : CouchDocument
{
public int Fu { get ; set ; }
public string Bar { get ; set ; }
}
Wenn das obige Modul beispielsweise in einem Update-Aufruf verwendet wird, aktualisiert Pillow die Versionsnummer im Objekt.
Alle Anrufe akzeptieren einen Parameter, um die Datenbank zu definieren, mit der Sie kommunizieren möchten. Wenn Sie dies nicht bei jedem Anruf festlegen möchten, können Sie dies auch als Parameter für Ihren Client festlegen:
client . ForcedDatabaseName = "pillow" ;
Eine andere Möglichkeit besteht darin, die Datenbank für jedes Modell festzulegen:
[ DBName ( "pillow" ) ]
public class TestDocument : CouchDocument
{
public int Fu { get ; set ; }
public string Bar { get ; set ; }
}
Es ist in Ordnung, alle drei Möglichkeiten zum Festlegen der Datenbank zu verwenden. Pillow verwendet sie in der folgenden Reihenfolge:
Bitte sehen Sie sich auch das Beispielprojekt an.
if ( ! await client . DbExists ( "pillow" ) )
{
if ( await client . CreateNewDatabase ( "pillow" ) )
Console . WriteLine ( "Database pillow created" ) ;
}
Im folgenden Beispiel wird davon ausgegangen, dass die Person
-Klasse CouchDocument
ineriert und das Attribut [DBName("pillow")]
verwendet. Es wäre auch möglich, die neue Revision und ID im Ergebnisobjekt des Aufrufs zu überprüfen.
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 } " ) ;
}
Erhalten Sie ein einzelnes Dokument nach ID und optional nach Revision:
var result = await client . GetDocument < Person > ( ID = "developer" ) ;
Verwenden Sie den Endpunkt „Alle Dokumente“ in CouchDB:
await client . GetAllDocuments ( Person . GetType ( ) ) ;
Es gibt noch weitere Möglichkeiten, mit PillowClient eine Liste von Dokumenten abzurufen:
Im folgenden Beispiel wird davon ausgegangen, dass die Person
-Klasse CouchDocument
ineriert und das Attribut [DBName("pillow")]
verwendet. Wichtig für diesen Aufruf ist, eine vorhandene ID an CouchDB zu senden.
var result = await client . DeleteDocument ( person ) ;
In den folgenden Beispielen wird davon ausgegangen, dass die Person
-Klasse CouchDocument
ineriert und das Attribut [DBName("pillow")]
verwendet.
Geben Sie einfach den Pfad zu der Datei an, die Sie dem Dokument anhängen möchten.
var result = await client . AddAttachment ( person , "fav.image" , "sleepy_owl.JPG" ) ;
Das Ergebnis wird ein Byte[] sein.
var result = await client . GetAttachement ( person , "fav.image" ) ;
var result = await client . DeleteAttachment ( person , "fav.image" ) ;
PillowSharp unterstützt:
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" ) } ) ;
Sie können CouchDB bitten, IDs für Sie zu generieren. Der PillowSharp-Client kann automatisch IDs für neue Dokumente generieren. Alle können in den Standardeinstellungen PillowClientSettings
konfiguriert werden:
public class PillowClientSettings
{
public bool AutoGenerateID { get ; set ; } = true ;
public bool UseCouchUUID { get ; set ; } = false ;
public bool IgnoreJSONNull { get ; set ; } = true ;
}
Um CouchDB-UUIDs zu generieren, können Sie den folgenden Aufruf verwenden:
var uuidResponse = await client . GetManyUUIDs ( AmountOfUUIDs : 10 ) ;
foreach ( var id in uuidResponse . UUIDS ) {
Console . WriteLine ( id ) ;
}