C# 如何为Couchdb HTTP api构造类?
我在试沙发DB api。但是无法为它构造类结构。像艺术家一样,如果我使用类发布,将有名称和相册字段。但在检索时,它将具有_id和_rev字段。现在,可以通过向artist类添加一个字段来处理id,但我需要_rev字段来更新文档 现在,我如何在C/F这样的静态类型语言中实现这一点C# 如何为Couchdb HTTP api构造类?,c#,rest,f#,couchdb,C#,Rest,F#,Couchdb,我在试沙发DB api。但是无法为它构造类结构。像艺术家一样,如果我使用类发布,将有名称和相册字段。但在检索时,它将具有_id和_rev字段。现在,可以通过向artist类添加一个字段来处理id,但我需要_rev字段来更新文档 现在,我如何在C/F这样的静态类型语言中实现这一点 如果需要更多信息,请告诉我 \u id是couchdb唯一标识文档的方法。您可以设置它,或者couchdb将在插入文档时设置uuid _rev是couchdb识别文档修订的方式。假设您想向现有文档添加新的详细信息,您必须
如果需要更多信息,请告诉我 \u id是couchdb唯一标识文档的方法。您可以设置它,或者couchdb将在插入文档时设置uuid _rev是couchdb识别文档修订的方式。假设您想向现有文档添加新的详细信息,您必须告诉couchdb您用于更新文档的版本。如果对同一文档进行了其他更改,您的更新将被拒绝 我将使用decorator模式实现这一点:
您的域模型将有一个包含相册中所有内容的相册类。您的数据访问层可以添加一个装饰器来存储_id和_rev。若您将一个文档存储到数据库中,那个么若您的对象并没有实现couchdb装饰器,您将知道要生成(或让couchdb生成)一个新的_id。如果实现了decorator,您可以从中访问_id和_rev。当从沙发加载对象时,只需将其设置为装饰并包含这些细节 \u id是couchdb唯一标识文档的方法。您可以设置它,或者couchdb将在插入文档时设置uuid _rev是couchdb识别文档修订的方式。假设您想向现有文档添加新的详细信息,您必须告诉couchdb您用于更新文档的版本。如果对同一文档进行了其他更改,您的更新将被拒绝 我将使用decorator模式实现这一点: 您的域模型将有一个包含相册中所有内容的相册类。您的数据访问层可以添加一个装饰器来存储_id和_rev。若您将一个文档存储到数据库中,那个么若您的对象并没有实现couchdb装饰器,您将知道要生成(或让couchdb生成)一个新的_id。如果实现了decorator,您可以从中访问_id和_rev。当从沙发加载对象时,只需将其设置为装饰并包含这些细节 对于类似的需求(),我使用了“数据访问对象”模式 以下是其伪代码结构:
Class数据库
constructor(baseURL)
get(id):JSONObject
put(JSONObject)
delete(JSONObject)
JSONObject
用于delete
,因为您需要\u id
和\u rev
在上层,您可以定义业务类,其中一些方法使用“保留”属性,而另一些方法允许访问“自由”属性
例如:
职业艺术家
getName():字符串
getFreeAttributes():JSONObject
Class数据库
constructor(baseURL)
get(id):JSONObject
put(JSONObject)
delete(JSONObject)
- 对于类似的需求(),我使用了“数据访问对象”模式
以下是其伪代码结构:
JSONObject
用于delete
,因为您需要\u id
和\u rev
在上层,您可以定义业务类,其中一些方法使用“保留”属性,而另一些方法允许访问“自由”属性
例如:
职业艺术家
getName():字符串
getFreeAttributes():JSONObject
using(var client = new MyCouchClient("http://localhost:5984/mydb")) {
var putJsonResponse = await client.Documents.PutAsync(...json...);
var putEntityResponse = await client.Entities.PutAsync(myEntity);
}
您只需对适合您的域的实体进行建模:
public class Artist
{
public string ArtistId { get; set; }
public string ArtistRev { get; set; }
public string Name { get; set; }
public Album[] Albums { get; set; }
}
public class Album
{
public string Name { get; set; }
public int Tracks { get; set; }
}
使用客户机存储模型,如上所述:
var artist = new Artist
{
ArtistId = "5",
Name = "Foo bar",
Albums = new[]
{
new Album { Name = "Hello world!", Tracks = 9 }
}
};
var response = await db.Entities.PutAsync(artist);
希望能有所帮助。要快速入门,您可能需要看看MyCuch-用于.NET的异步CouchDb- 这里有一篇入门文章(关于专辑和艺术家): 在Wiki中查找有关如何开始的信息,但基本上:
using(var client = new MyCouchClient("http://localhost:5984/mydb")) {
var putJsonResponse = await client.Documents.PutAsync(...json...);
var putEntityResponse = await client.Entities.PutAsync(myEntity);
}
您只需对适合您的域的实体进行建模:
public class Artist
{
public string ArtistId { get; set; }
public string ArtistRev { get; set; }
public string Name { get; set; }
public Album[] Albums { get; set; }
}
public class Album
{
public string Name { get; set; }
public int Tracks { get; set; }
}
使用客户机存储模型,如上所述:
var artist = new Artist
{
ArtistId = "5",
Name = "Foo bar",
Albums = new[]
{
new Album { Name = "Hello world!", Tracks = 9 }
}
};
var response = await db.Entities.PutAsync(artist);
希望能有所帮助。我不确定您需要哪一部分的示例,而且内容太多,无法涵盖整个问题。这是一个关于如何映射的好例子。如果然后使用添加_id和_rev的属性,以及当要将对象持久化到内存中时,如果对象在内存中过期,则更新该对象的行为。最后,你可以看看_rev是如何使用的。我不确定你需要哪一部分的例子,而且有太多的元素来涵盖整个问题。这是一个关于如何映射的好例子。如果然后使用添加_id和_rev的属性,以及当要将对象持久化到内存中时,如果对象在内存中过期,则更新该对象的行为。最后,您可以查看以了解_rev是如何使用的。我尝试了MyTouch,但在更新实体时遇到错误:(什么错误?您是否包含必需的rev和id成员?抱歉,我忘记回答…正在度假。我今天将执行此操作并在github上提交错误。我尝试了MyTouch,但在更新实体时遇到错误。:(什么错误?您是否包含必需的rev和id成员?抱歉,我忘记回答。)