Pillowsharp เป็นไลบรารีที่ออกแบบมาเพื่อใช้เป็นไคลเอนต์สำหรับ Apache CouchDB ที่เขียนด้วย .NET Core เป้าหมายคือการนำเสนอสิ่งที่สามารถใช้งานได้ทันทีโดยไม่จำเป็นต้องกำหนดค่าหรือใช้โค้ดจำนวนมาก Pillowsharp ใช้คุณสมบัติ async
และ await
จาก .NET ที่ไม่อนุญาตให้มีการบล็อกคำขอไปยังฐานข้อมูล
หากต้องการสร้างไลบรารีและดำเนินการทดสอบหน่วย โปรดปฏิบัติตามคำแนะนำด้านล่าง:
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")]
นอกจากนี้ยังสามารถตรวจสอบการแก้ไขใหม่และรหัสในออบเจ็กต์ผลลัพธ์จากการโทรได้
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 } " ) ;
}
รับเอกสารฉบับเดียวตามรหัสและเป็นทางเลือกตามการแก้ไข:
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" ) ;
ผลลัพธ์จะเป็นไบต์[]
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 Client สามารถสร้าง 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 ) ;
}