Pillowsharp هي مكتبة مصممة لاستخدامها كعميل لـ Apache CouchDB المكتوب بلغة .NET Core. الهدف هو تقديم شيء يمكن استخدامه خارج الصندوق دون الحاجة إلى التكوين أو الكثير من التعليمات البرمجية. تستفيد Pillowharp من ميزة 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 ) ) ;
يرجى ملاحظة: أنت بحاجة إلى ضبط نوع تسجيل الدخول كما هو موضح هنا
يوجد مثال للاستخدام لبعض وظائف الوسادة في المشروع النموذجي في المستودع.
تسمح لك الوسادة باستخدام أي فئة C# كنموذج للإرسال والاستقبال من CouchDB. إذا كنت ترغب في جعل حياتك أسهل قليلاً، فانتقل إلى CouchDocument
. يتيح ذلك لجميع وظائف الاتصال الخاصة بالوسادة ضبط علامة المعرف والمراجعة والحذف تلقائيًا.
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 ; }
}
من الجيد استخدام الطرق الثلاث لتعيين قاعدة البيانات، وسوف تستخدمها وسادة بالترتيب التالي:
يرجى أيضًا الاطلاع على مثال المشروع.
if ( ! await client . DbExists ( "pillow" ) )
{
if ( await client . CreateNewDatabase ( "pillow" ) )
Console . WriteLine ( "Database pillow created" ) ;
}
المثال أدناه يفترض أن فئة Person
inerheits 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
inerheits CouchDocument
وتستخدم السمة [DBName("pillow")]
. من المهم لهذه المكالمة إرسال معرف موجود إلى 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 إنشاء معرفات لك، ويمكن لبرنامج PillowSharp Client إنشاء معرفات تلقائيًا للمستندات الجديدة. يمكن تكوين كل ذلك داخل الإعدادات الافتراضية 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 ) ;
}