我曾经使用过自定义数据映射库,而且我正试图切换到更广泛的ORM解决方案。
经过一些实验,我将我的要求提炼为以下内容:
你能推荐一个吗?
到目前为止,我已经尝试过:
亚音速3.0
我最喜欢的那个,因为它感觉就像功能和简单之间的良好平衡。
我不喜欢的事情:
Castle ActiveRecord
带有ActiveWriter加载项的CastleAR几乎就是我所需要的,但ActiveWriter的代码并不完美(似乎不支持Nullable<>属性,默认的一对多实现不起作用)和我无法找到如何手动修复此代码。Darkside GeneratorStudio产生更好的代码 - 正确的定义,每个实体一个文件 - 尽管它使用隐藏的名称,如 RefclassIdRefclass 。我个人喜欢Studio addin而不是独立应用程序,但这肯定是一个小问题。
CastleAR发行版中捆绑了大约20个文件;虽然本身不是问题,但感觉就像超重。我不需要太多关于NHibernate和其他东西的深奥知识吗?
流利的NHibernate
广泛推荐,但我无法找到它的代码生成器。
我错过了重要的事情吗?
答案 0 :(得分:3)
NHibernate不遵循活动记录模式,它遵循存储库模式。
FluentNHibernate的目标是需要维护映射文件,代码生成等。它支持Fluently定义的NH#文件的NH#文件,它非常好,比XML更易于维护,但它的自动映射功能更强大。如果您的数据库是使用强定义的约定设计的,则可以配置FNH,它将正确地生成所有域对象到数据库结构的正确映射。
如果你对设计数据库更感兴趣并且决定你的域名模型(这会让我觉得非常肮脏),那么这里有一个问题专门讨论NHibernate Generators
回答你的评论: NHibernate本身不会改变数据库本身,但是有一个名为SchemaExport的实用程序类,它提供了一个名为Create的工厂方法。您可以使用它来生成以NHibernate查看关系结构的方式创建数据库所需的SQL语句。并且可以选择直接针对数据库运行或写入控制台。
此实用程序对于将域正向生成到数据库非常有用,它目前是我为所有新应用程序开发编写数据库的方式。我仍在努力找出维护数据库版本的最佳方法。最糟糕的情况是SC只是SC输出,并且需要对每一行更改模式的注释,以使其具有特定的更新/删除语句来实现结果。这样可以很容易地按版本前滚/后退,或者只是执行整个脚本从头开始创建数据库。
如果你纯粹是为了反向映射,应该有可用的工具来生成数据库需要映射到等效类的相应HBM(即如果你原本在域模型中编写这些类,它将导出匹配的模式您当前的数据库)
答案 1 :(得分:2)
- 能够从数据库模式生成可用的类(SQL Server支持是 足够),
- 支持ActiveRecord模式,
- programmaticaly可配置(通过代码或属性,没有HBM文件), 免费。
Linq-to-SQL从数据库架构自动生成。一个大问题是属性名称是小写的,因此您需要像this one这样的工具来重命名它们。 It isn't restricted to SQL Server
这些类可以通过dbml文件进行配置,该文件只是一个XML文件。 Visual Studio生成一个designer.cs
文件,允许您在生成为partial
类时生成的实体添加。
除了NH和亚力克之外,其他一些人还要看看:
答案 2 :(得分:1)
关于你不喜欢SubSonic的一些想法:
是的,我同意这是非常反直觉的,我从来没有深究其中的原因,但你可以很容易地修改模板来解决这个问题。
您认为这可能会导致问题,但我还没有遇到任何问题,而且我还没有看到有关stackoverflow的报告。
只有在您编辑t4文件时才会自动调用它,所以当您对模板进行更改时,实际上只需要一个最新的模式。
答案 3 :(得分:1)
我们使用CodeSmith进行代码生成,并强烈推荐它作为生成工具。
如果您查看CodeSmith,它支持各种ORM /业务对象模板。
我们几年前实施了自己的CSLA(参见http://www.lhotka.net/)模板来掌握CSLA,而不仅仅是ORM。 CSLA很棒,效果很好,而且具有很高的可扩展性。我们现在已经创建了自己的框架并删除了核心CSLA框架,因为我们不需要所有功能并且使事情变得更轻便。
答案 4 :(得分:0)
我想知道旧的SubSonic 2.2是否更适合您的要求?它确实为每个表生成单独的类,只在您告诉它时重新生成,并支持ActiveRecord模式。请参阅http://subsonicproject.com/docs/Main_Page
文档中的更多详细信息答案 5 :(得分:0)
关于以前的帖子CSLA不是ORM(您可以手动执行从数据库到Business Objects的映射)。 CSLA,NHibernate,亚音速等不支持活动记录模式。
如果您正在考虑不支持Active Records模式的Frameworks,那么我会考虑Habanero(http://www.habanerolabs.com/)这是开源的,并允许您通过XML配置或通过代码构建Business Objects。 Habanero不仅仅是一个ORM,还具有丰富的域(业务对象)支持,并具有强大的对象模型,用于表示您的域对象(Business Objects)。