我曾经使用自定义数据映射库,现在我正在尝试切换到更广泛的 ORM 解决方案。
经过一些实验,我将我的要求细化为以下内容:
你能推荐一个吗?
到目前为止,我已经尝试过:
亚音速 3.0
我目前最喜欢的一个,因为它在功能性和简单性之间取得了很好的平衡。
我不喜欢的地方:
CaSTLe ActiveRecord
带有 ActiveWriter 插件的 CaSTLeAR 几乎是我所需要的,但 ActiveWriter 的代码并不完美(似乎,不支持 Nullable<> 属性,并且默认的一对多实现不起作用)而且我找不到如何手动修复此代码。
Darkside GeneratorStudio 生成更好的代码——正确的定义,每个实体一个文件——尽管它使用了像 RefclassIdRefclass 这样的神秘名称。与独立应用相比,我个人更喜欢 Studio 插件,但这当然是一个小问题。
CaSTLeAR 发行版中捆绑了大约 20 个文件;虽然本身不是问题,但感觉像超重。我不需要太多关于 NHibernate 和其他东西的深奥知识吗?
流畅的 NHibernate
广泛推荐,但我找不到它的代码生成器。
我错过了什么重要的事情吗?
最佳答案
NHibernate 不遵循事件记录模式,它遵循存储库模式。
FluentNHibernate 的目标是不再需要维护映射文件、代码生成等。它支持 Fluently 定义的 C# 等效的 NHibernate HBM 文件,这非常好,比 XML 更易于维护,但它的强大方面是它的自动映射功能。如果您的数据库设计有严格定义的约定,则 FNH 可以配置为它将生成所有域对象正确映射到您的数据库结构。
如果您对设计数据库更感兴趣并决定您的域模型(这会让我觉得很脏),这里有一个专门针对 NHibernate Generators 的问题。
回复您的评论: NHibernate 本身不会改变数据库本身,但是包含一个名为 SchemaExport 的实用程序类,它提供了一个名为 Create 的工厂方法。您可以使用它来生成创建数据库所需的 SQL 语句,就像 NHibernate 看到您的关系结构一样。并且可以选择直接针对数据库运行或写入控制台。
此实用程序对于将域向前生成到数据库非常有用,目前我正在为所有新应用程序开发编写数据库。我仍在努力找出维护数据库版本的最佳方法。最坏的情况是只是 SC sql 输出,并且需要对更改架构的每一行进行注释,以使其具有特定的更新/删除语句来实现结果。这将使按版本向前/向后滚动或仅执行整个脚本以从头开始制作数据库变得容易。
如果您纯粹进行反向映射,则应该有可用的工具来生成您的数据库需要映射到等效类的相应 HBM(即,如果您最初在域模型中编写了这些类,它将导出您当前的匹配模式数据库)
关于具有类自动生成 : Subsonic, CaSTLe AR 的 .NET ORM 解决方案,...?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2042967/