从对象定义生成数据库表

时间:2008-08-26 22:58:59

标签: database orm code-generation

我知道有一些(自动)方法可以创建数据访问层来操作现有数据库(LINQ to SQL,Hibernate等...)。但我有点厌倦(我相信应该有更好的做事方式),比如:

  1. 在Visio中创建/更改表格
  2. 使用Visio的“更新数据库”创建/更改数据库
  3. 将表导入“LINQ to SQL classes”对象
  4. 相应地更改代码
  5. 编译
  6. 如何从对象/实体定义生成数据库模式?我似乎无法找到像这样的工具的良好参考(我希望至少在某些框架中有某种内置支持)。

    如果我可以,那将是完美的:

    1. 更改对象定义
    2. 更改操纵对象的代码
    3. 编译(数据库更改自动完成)

10 个答案:

答案 0 :(得分:4)

签出DataObjects.Net - 旨在支持这种情况。仅限代码,没有别的。它的schema upgrade layer可能是你能找到的最有特色的,它实际上完全抽象了模式升级SQL。

签出product video - 您会发现没有其他内容可用于同步架构。架构升级示例显示了此功能的预期用途。

答案 1 :(得分:1)

您可能正在寻找Object Database

答案 2 :(得分:1)

我认为这是Microsofy Entity Framework试图解决的问题。虽然没有专门设计为“编译(数据库更改是自动完成的)”,但它确实解决了处理域模型更改的问题,而没有对基础数据模型的巨大依赖。

答案 3 :(得分:1)

正如Jason所说,对象db可能是一个不错的选择。看看db4objects

答案 4 :(得分:1)

你所描述的是GORM。它是Grails框架的一部分,用于与Hibernate(将来可能是JPA)一起使用。当我第一次使用Grails时,它似乎倒退了。我更熟悉Rails风格的工作流程,即制作表格并让框架从数据库模式生成脚手架。 GORM会为您保留域对象,以便您创建和更改对象,它可以管理数据库创建/更新。现在我已经习惯了它,这更有意义。很抱歉,如果您不是在寻找新的框架,而是在roadmap版本1.1上,以便让GORM独立可用,请取笑您。

答案 5 :(得分:1)

当我们构建自己的框架的第一个版本(Inon Datamanager)时,我让它读取预先存在的SQL表并从中自动生成Java对象。

当来自Smalltalkish背景的同事构建第二个版本时,他们从对象开始,然后自动生成表格。

实际上,他们完全忘记了SQL部分,直到我回来并添加它。但是现在我们只是在应用程序启动时运行一个触发器,它会迭代对象模型,检查表和所有正确的列是否存在,如果不存在则创建它们。非常方便。

事实证明这比你想象的容易得多 - 如果你最喜欢的工具不支持类似的过程,你可能会在几个小时内编写它 - 假设对象映射的关系相对简单。 / p>

但重点是,它似乎取决于你在文化上是一个客体人还是数据库人 - 你可以将其中任何一个视为权威来源。

答案 6 :(得分:0)

一些非常大的狗,比如ERwin Data Modeler,会反对DB。你需要花大价钱购买产品。

答案 7 :(得分:0)

我一直在挖掘一些“主要”框架,似乎Django正是我所说的。或者似乎从screencast开始。

有没有人对此有任何评论?它运作良好吗?

答案 8 :(得分:0)

是的,Django效果很好。

是的,它将从您的数据模型定义(用python编写)

生成SQL表

如果更新结构,它不会总是更改现有表,您可能需要手动运行ALTER表

Ruby on Rails有这些功能的更高级版本(Rails迁移),但我不喜欢这个框架,我发现ruby和rails非常特殊

答案 9 :(得分:0)

这是一个迟到的答案,但在这里:

我遇到了完全相同的问题,最后为它编写了我自己的解决方案,但是只使用.NET和SQL Server。它基本上实现了您描述的过程:

  • 所有数据库对象都作为源代码的一部分保存为嵌入式CREATE脚本
  • 使用数据访问功能时自动(或根据请求)设置数据库对象
  • 所有非表格更改也会同时自动(或根据要求)执行
  • 表格更改(可能需要特别注意迁移数据)也是在升级数据库时通过(手动创建的)更改脚本执行的。
  • 甚至可以检测对任何数据库对象进行的手动更改,以便验证和纠正架构完整性
  • 可选的轻量级ORM可以映射存储过程和对象以及结果集(甚至是多个)
  • 命令行应用程序有助于保持SQL源文件与开发数据库同步

包含数据库的图书馆在LGPL许可下是免费的。

http://code.google.com/p/bsn-modulestore/