Pillowsharp는 .NET Core로 작성된 Apache CouchDB용 클라이언트로 사용하도록 설계된 라이브러리입니다. 목표는 구성이나 많은 코드 없이 즉시 사용할 수 있는 것을 제공하는 것입니다. Pillowsharp는 DB에 대한 요청을 차단하지 않는 .NET의 async 및 await 기능을 사용합니다.
라이브러리를 빌드하고 단위 테스트를 실행하려면 아래 지침을 따르십시오.
curl -X PUT localhost:5984/_config/admins/admin -d '"admin"' 사용하여 소파 관리자를 추가합니다.library/nuget 사용할 준비가 된 것입니다.참고: CouchDB 2.X를 사용하는 경우 개발 환경 구성에 일부 변경 사항이 있으므로 dev_couch2_setup.sh/bat 파일을 사용할 수 있습니다. 단위 테스트에도 사용되는 기본 관리자로 단일 노드 인스턴스를 구성합니다.
5단계(테스트 사례 실행)에서 문제가 발생하는 경우 CouchDB 인스턴스에 대한 모든 구성이 올바른지 CouchSettings.cs 파일을 확인하세요. 여전히 문제나 질문이 있는 경우 문제를 열거나 저에게 연락해 주세요.
리포지토리를 복제하고 관련 빌드 스크립트를 실행하거나(설정 섹션 참조) 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 ) ;
}