寻找有关嵌入式 .NET 数据库(例如 db4o、NHibernate 或 RavenDB)的指导

Posted

技术标签:

【中文标题】寻找有关嵌入式 .NET 数据库(例如 db4o、NHibernate 或 RavenDB)的指导【英文标题】:Looking for guidance on embedded .NET database (such as db4o, NHibernate, or RavenDB) 【发布时间】:2010-08-27 00:19:47 【问题描述】:

我有一个要使用嵌入式数据库存储的对象模型。到目前为止,我一直在研究 db4o、NHibernate 到 SQLCE(带 linq)和 RavenDB。这将在桌面 C# 应用程序中使用。

我希望利用的主要功能是:用于查询的 Linq 或类似功能(无 SQL 或 HQL)、嵌入式数据引擎、pocos、poco 优先模型、无需安装(无注册表或类似功能)

谁能推荐一个?我正在寻找的三个是最佳选择吗?还有其他选择吗?在这三个中,有人可以推荐一个吗?

谢谢

【问题讨论】:

Embedded database for .net的可能重复 还有***.com/questions/2842189/…和***.com/questions/271319/… 【参考方案1】:

这三个建议的数据库在性质上非常不同。 SQLCE 与 Hibernate 作为具有 ORM 的 RDBMS,db4o 作为对象数据库,RavenDB 作为文档数据库。他们每个人都有自己的长处。

SQL CE 和 NHibernate 组合 好的:

在工具、知识和大型社区方面提供非常好的支持 易于升级到 MS SQL 服务器 极好的报告支持 SQL 的强大功能

坏处:

需要映射 OO 和关系世界之间的映射并不容易,并且可能导致复杂模型出现问题。

RavenDB

好的:

不需要任何映射 易于使用 强大的索引 JSON 和 HTTP 访问

坏处:

如果您的域不适合面向文档的方法,那将会非常痛苦 它不支持 .NET Framework 客户端配置文件(这一点特别重要,因为 OP 的问题涉及嵌入式数据库)

db4o

好的:

不需要任何映射 易于使用 存储模型与对象模型接近。这也适用于非常复杂的模型。 -

坏处:

工具支持薄弱。

Afaik 所有三个都支持 LINQ 和 POCO-first 方法。然而,由于 NHibernate 和 SQL CE 仍然需要大量的映射,因此它并没有尽可能地无摩擦。

我认为,如果您首先关注 POCO、LINQ 支持、嵌入式使用和易于使用,我会尝试使用 RaveDB 或 db4o。 如果您的重点是“安全”、社区知识、工具支持和报告,我会选择 NHibernate 和 SQL CE。

【讨论】:

谢谢。鉴于我的域并没有那么大,以至于映射工作量太大,我相信 NHibernate 方法可能是最好的。主要是因为社区的支持。 RavenDB 有点太新了,还没有庞大的知识库 作为一个嵌入式数据库,NHibernate 存在严重的问题。在此时选择 NHibernate 之前,我会选择 Linq-To-SQL 或 EntityFramework4。这两种技术都融入了框架,没有外部依赖。【参考方案2】:

Firebird 是一个了不起的嵌入式数据库,长期以来一直支持企业数据库的所有现代功能:

ANSI SQL 酸 存储过程 触发器

您可以获取.NET provider(根据网站的最新更新日期为 5 月 24 日),它支持 Entity Framework 和 Linq。

【讨论】:

【参考方案3】:

见this question。如需 LINQ 支持,请查看DbLinq,或者由于您已经打算使用 NHibernate,您可以使用 NHibernate 自己的 LINQ 提供程序。

【讨论】:

我确实看到了其他帖子。问题是他们专注于嵌入式关系数据存储,我正在寻找存储对象模型的东西。他们为 NHibernate 提供了选项。 DbLinq 将为我提供底层数据存储的 linq 提供程序,但它不会提供我正在寻找的丰富的 POCO 第一个模型。我很欣赏这个建议,如果我选择 NHibernate,我可能会考虑这些选项。但是,我仍在寻找在 POCO 第一个模型中最有效的建议。 @David B:查看 fluent nhibernate 的自动映射:wiki.fluentnhibernate.org/Auto_mapping 谢谢,我一直在考虑这个。然而,我最近看到了更多关于其他两个的积极消息,并希望了解 NHibernate 是否仍然是事实上的选择。

以上是关于寻找有关嵌入式 .NET 数据库(例如 db4o、NHibernate 或 RavenDB)的指导的主要内容,如果未能解决你的问题,请参考以下文章

如何规避大型嵌入式 db4o 数据库的大文件

db4o - 线程安全、嵌入式服务器、事务...一般问题

在 db4o 中创建对象时限制子重复项

寻找有关如何在 UITableViewCell 中嵌入 UITextField 的示例

Db4o - 如何一步重命名字段?

db4o官方停止支持及面向对象数据库的一些感想