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 автоматически устанавливать флаги идентификатора, версии и удаления.
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")]
. Для этого вызова важно отправить существующий идентификатор в 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 может автоматически генерировать идентификаторы для новых документов. Все это можно настроить в настройках PillowClientSettings
по умолчанию:
public class PillowClientSettings
{
public bool AutoGenerateID { get ; set ; } = true ;
public bool UseCouchUUID { get ; set ; } = false ;
public bool IgnoreJSONNull { get ; set ; } = true ;
}
Чтобы сгенерировать UUID CouchDB, вы можете использовать следующий вызов:
var uuidResponse = await client . GetManyUUIDs ( AmountOfUUIDs : 10 ) ;
foreach ( var id in uuidResponse . UUIDS ) {
Console . WriteLine ( id ) ;
}