哪些 ORM 框架将为您构建和执行 SQL DDL?

Posted

技术标签:

【中文标题】哪些 ORM 框架将为您构建和执行 SQL DDL?【英文标题】:Which ORM frameworks will build and execute the SQL DDL for you? 【发布时间】:2011-08-19 15:38:24 【问题描述】:

Entity Framework Code First 将为您构建数据库(如果它不存在)并根据您的映射对象构建它。我相信 Roundhouse 会使用 NHibernate 对 Fluent Mapping 文件做同样的事情。

是否有任何其他 ORM(或 Roundhouse 之类的工具)可以处理所有 SQL DDL 创建和执行?

【问题讨论】:

【参考方案1】:

NHibernate 不需要到 generate database schema 的 Fluent 映射。此功能内置于 NHibernate 核心中:

new SchemaExport(_configuration).Execute(false, true, false);

然而,根据我的经验,这对于内存集成测试或初始部署非常有用。生产数据库需要为upgraded。如果你坚持,那么你将需要在不影响数据的情况下添加和删除列、表和外键。它具有连续性和版本控制方面。 NHibernate 只知道您的 当前 映射。例如,它不知道 2 个月前您将客户的名字和姓氏存储在名为“CustomerName”的列中,然后您决定将其拆分为“FirstName”和“LastName”两列(这可能是最原始的更改可以制作)。 NHibernate 的工作是将您当前的模式映射到对象,而不是记住几年前的数据建模选择。

根据我的经验,没有可以编写升级脚本的神奇工具,它们必须手动编写或至少由开发人员审查。工具可以为您提供执行这些脚本的框架,例如RoundhouseE。 Scott Allen 有一个 excellent series 关于“forward-only, run-once”的方法。

【讨论】:

RoundhouseE 在使用 refreshdatabase 概念时利用了 NHibernate 的 SchemaExport 和 SchemaUpdate(与 NH 一起执行 RH 的控制台应用程序)github.com/chucknorris/roundhouse/wiki/…【参考方案2】:

如果您在配置文件中将hbm2ddl.auto 设置为createcreate-dropupdate,则休眠会执行此操作。也就是说,使用 Java,我假设 nHibernate 也是如此。

如果 ORM 不做 ddl,那么拥有它并没有多大意义,至少它是一个关键特性。恕我直言。

【讨论】:

以上是关于哪些 ORM 框架将为您构建和执行 SQL DDL?的主要内容,如果未能解决你的问题,请参考以下文章

[SQL] sql server中如何查看执行效率不高的语句

ORM - 是不是需要 DDL 脚本?

GraphQL 是 ORM 吗?

关于SQLAlchemy ORM框架

ORM框架/SQLAchemy

python 之 Django框架(orm单表查询orm多表查询聚合查询分组查询F查询 Q查询事务Django ORM执行原生SQL)