57

.NET(托管代码)可以读写 CouchDB 吗?

我想构建我的项目的一部分,使用 CouchDB 进行文档管理

4

15 回答 15

22

这是一个迟到的答案,但请查看Hammock。它很活跃,很快就会在几个项目中投入生产使用,并且正在接收定期更新和修复。除了基本的对象持久性之外,Hammock 还为您提供:

  • 真正的 POCO。您甚至不需要“id”属性;吊床在内部跟踪。
  • 对视图的强大支持,包括一个易于使用的 fluent API 生成和执行视图,并支持创建自定义 map/reduce 视图。
  • 附件支持。
  • 一个通用Repository<>类,有助于将您的查询/视图(即 _Design doc)与您的 c# 应用程序代码结合在一起。存储库负责维护 _design 文档,这有助于防止 CouchDB 视图感觉像存储过程
  • 完整的单元测试套件。这不是原型软件。
于 2009-12-30T16:49:52.430 回答
18

看看SharpCouch实用程序类。

它是 CouchDB HTTP API 的简单包装类。

于 2009-06-26T17:23:28.413 回答
9

鉴于您通常通过 REST 和 JSON 与 CouchDB 进行通信,我想使用JSON.NET和普通的 WebClient/HttpWebRequest 类来做到这一点不会太难。我自己没试过,请注意...

于 2009-06-26T17:02:12.513 回答
9

是的。

有关在 Windows 上安装 CouchDB 的说明,请参见此处

这是C# wiki 文章入门的链接。该文章中有一个指向 .Net 包装器的链接。自己动手也很容易。

于 2009-06-26T17:20:48.743 回答
9

游戏有点晚了,但是有一个开源项目,用于在异步 HTTP 客户端上用 C# 编写的新驱动程序,默认情况下,Newtonsoft 的 JSON.Net 用于序列化(可切换)。MyCouch - 用于 .Net 的简单异步 CouchDb 客户端。

此处有一个入门帖子:http: //danielwertheim.se/get-up-and-running-with-couchdb-and-c-using-mycouch-on-windows/

于 2013-04-29T19:18:47.790 回答
6

密切关注Ottoman一个用 C# 编写的开源项目。它仍在大力开发中,但我想指出它是规划阶段项目的一个选择。我会在这篇文章接近完成时更新它。您可以在github上查看源代码。阅读 README 以查看示例以及当前版本的功能。

  • 与大量使用字符串的 SharpCouch 不同,Ottoman 使用泛型进行自动序列化和反序列化以从 JSON 字符串映射对象,反之亦然。所有这一切都不需要您的对象继承接口或基类。
  • 它在下面使用 Json.Net 来处理 JSON 序列化和反序列化。
  • 将 CouchDB 返回的 RESTFul 错误代码映射到异常中。
  • 计划功能:用于为被持久化的对象生成 ID 的 ID 生成器
  • 计划功能:通过文档修订隐式离线乐观锁定,Ottoman 将使用 身份映射来跟踪您,并在发生冲突时抛出异常。
  • 计划功能:它将与 Mono 兼容。
  • 计划中的功能:这是在路上,但我确实计划为 Map/Reduce 函数使用 LINQ 表达式,您使用 JavaScript 将其表达到 CouchDB。

这是一个相当新的项目,但非常活跃。当然,我也有点偏激。;-)

于 2009-08-18T14:49:22.603 回答
5

还可以看看divan - cdb api 的轻量级包装器

于 2009-09-10T02:46:06.757 回答
3

我已经将 JSON.NET 与 MS REST 入门工具包的 http 客户端类结合使用以集成到 CouchDB 中,并且效果非常好。

于 2009-07-30T07:35:36.213 回答
3

如果您想要最新状态,CouchDB 的 wiki 有一个 C# API 列表(及其功能):http ://wiki.apache.org/couchdb/Getting_started_with_C%23

于 2014-06-06T20:00:59.397 回答
2

WDK10 中包含的 CouchDB 非常易于使用的 .NET API,您可以从http://code.google.com/p/skitsanoswdk/获取它非常灵活,允许您处理对象和纯 json 级别的数据。

于 2011-01-24T21:31:49.717 回答
2

选项(按最新更新排序):

于 2012-09-28T09:05:17.027 回答
1

还有一个 - CouchDBClient:https ://github.com/ttutisani/CouchDBClient

免责声明:我是作者。

我试图让 CouchDBClient 更友好地使用自定义对象——这通常是应用程序存储在数据库中的内容。

当我开始编写这个框架时,我发现并尝试过的所有其他方法都给人一种非标准化方法签名的印象(使用各种约定命名并且更难猜测它们做了什么),而不是统一的接口(一些围绕字符串文档的操作,而其他围绕 json 文档),不是很灵活(有些只使用字符串,其他只使用对象),或者不是很抽象(必须首先了解 CouchDB REST API 才能正确使用它们)。我假设并希望它们从那时起已经成熟,但至少这个设计符合我的口味。

我希望 CouchDBClient 可以创造一种舒适的抽象感,而不必过多担心底层 API,而只关注您的应用程序,以及它如何存储和检索所需的对象。

于 2018-01-11T14:01:55.097 回答
1

我知道我很晚了,但也许这对未来有帮助。在过去的几年里,我为 CouchDB 开发了一个库。

最大的特点是将 LINQ(类似 EF Core)转换为 mango 查询,还有 DB Changes Feed、Views 和 Table Splitting。

https://github.com/matteobortolazzo/couchdb-net

var skywalkers = await context.Rebels
    .Where(r => 
        r.Surname == "Skywalker" && 
        (
            r.Battles.All(b => b.Planet == "Naboo") ||
            r.Battles.Any(b => b.Planet == "Death Star")
        )
    )
    .OrderByDescending(r => r.Name)
    .ThenByDescending(r => r.Age)
    .Take(2)
    .Select(
        r => r.Name,
        r => r.Age
    })
    .ToListAsync();
于 2021-03-09T20:29:48.230 回答
0

查看放松http://www.sharplearningcurve.com/wiki/Symbiote-Relax.ashx。Relax 是“CouchDB(优秀)RESTful API 的.Net API 抽象。它包括一个用于文档交互的基于存储库的接口和一个用于管理类型任务的服务器控制器。”

于 2010-05-29T20:49:03.803 回答
0

我推荐 CouchDb.Repository.Helper 包。它是全面的,允许您在 XML 文件中创建查询,并根据变量的值或对象的属性解析动态参数。

我有同样的需求,在评估了可用的选项后,为了满足我的应用程序的要求,我创建了这些对我有很大帮助的组件,也许它们可以帮助你和其他人。我明确表示我无意在这里推销自己,只是分享一些可能有用的东西。

如何配置和使用的详细说明在github上。

链接:Nuget 包| Github

使用 mango-querie 检索文档的使用示例:

IList<User> users;
var sts = new List<String> { "ACTIVE", "LOCKED" };
using (UserRepository db = new UserRepository())
{
    var query = db.FindOf("list-status", new { id = "OwnerIdloop.user.7", statuses = sts });
    users = db.List<User>(query);
}
Array.ForEach(users.ToArray(), Console.WriteLine);

添加文档示例:

User user = createUser("email@email.com");
using (UserRepository db = new UserRepository())
{
    var result = db.Insert<User>(user); // add document and return instance changed with operation revision id
    Console.WriteLine(result.Revision);
}

更改文件示例:

using (UserRepository db = new UserRepository())
{
    // Load document data by ID
    var user = db.Get<User>("email@email.com");
    user.Name = user.Name + "::CHANGED";

    var result = db.Update<User>(user); // update document and return instance changed with operation revision id
    Console.WriteLine(result.Revision);
}

删除文档示例:

using (UserRepository db = new UserRepository())
{
    // Load document data by ID
    var user = db.Get<User>("email@email.com");

    var result = db.Delete<User>(user); // delete document from database. Return true case sucess or false case not deleted
    Console.WriteLine($"Sucesso: {result}");
}

希望这可以帮助!

于 2020-11-02T00:04:31.400 回答