2008-08-26 95 views
4

我知道有几种(自动)方法来创建数据访问层来操纵现有数据库(LINQ to SQL,Hibernate等)。但我越来越有点累(我相信应该有做事情的更好的方式)的东西,如:从对象定义生成数据库表

  1. 创建/更改表在Visio
  2. 使用Visio的“更新数据库”创建/改变数据库
  3. 导入表变成 “LINQ to SQL类” 对象
  4. 相应
  5. 改变代码编译

W¯¯关于从对象/实体定义中生成数据库模式的方法?我似乎无法找到像这样的工具的良好参考(并且我希望至少在某些框架中有某种内置支持)。

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

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

回答

1

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

0

一些真正的大狗,如ERwin Data Modeler,将反对DB。你需要花大价钱购买产品。

1

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

+0

这是一个非常好的产品。几乎很好是真的......仍然在等待捕捉。 – 2009-06-23 03:21:51

+0

问题在于它是对象数据库,因此不是基于上级关系模型。 – 2009-11-16 01:34:57

1

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

0

我一直在挖掘一些“主要”框架,看起来Django的确如我所说的那样。或者从screencast看来似乎是这样。

有没有人对此有任何评论?它工作正常吗?

1

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

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

事实上,他们完全忘记了SQL部分,直到我回来并添加它。但是现在我们只是在应用程序启动时运行一个触发器,它遍历对象模型,检查表和所有正确的列是否存在,如果不存在,则创建它们。很方便。如果你喜欢的工具不支持类似的过程,你可以在几个小时内写出它 - 假设与对象映射的关系相对简单。

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

0

是的,Django运作良好。

是的,它会产生从你的数据模型定义的SQL表(用Python编写的)

它不会永远改变现有的表,如果你更新你的结构,您可能需要手动运行ALTER TABLE

的Ruby on Rails有一个更高级版本的这些功能(Rails迁移),但我不喜欢的框架为多,我发现Ruby和Rails漂亮特质

4

退房DataObjects.Net - 被设计成完全支持这种情况。只有代码,没有别的。它的schema upgrade layer可能是你可以找到的最有特色的一个,它真的完全抽象模式升级SQL。

检出product video - 您会发现没有其他任何操作来同步架构。架构升级示例显示了此功能的预期用法。

0

后期答案的种类,但这里有云:

我面对完全相同的问题,最终写我自己的解决方案,这,然而仅在.NET和SQL Server的工作。它basicaly确实实现了过程你描述:嵌入式CREATE脚本作为源代码

  • DB对象会自动设置(或收费)使用数据访问功能时的一部分

    • 所有DB对象保持
    • 所有非表格更改也同时自动执行(或根据请求)
    • 也可以在升级数据库时通过(手动创建的)更改脚本来执行表格更改,这些更改可能需要特别注意迁移数据
    • 到任何DATABSE对象所做即使手动更改可以被检测,因此该模式完整性可以被验证和整流
    • 可选轻质ORM可以映射存储过程和对象以及结果集(偶数倍)
    • 甲命令 - 在线应用程序有助于保持SQL源文件与开发数据库同步

    包含数据库的库在LGPL许可证下是免费的。

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