Pillowsharp 是一个库,旨在用作用 .NET Core 编写的 Apache CouchDB 的客户端。目标是提供可以开箱即用的东西,无需配置或大量代码。 Pillowsharp 利用 .NET 的async
和await
功能,允许对数据库的无阻塞请求。
要构建库并运行单元测试,请按照以下说明操作:
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")]
属性。还可以在调用的结果对象中检查新版本和 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 ) ;
}