从类生成数据库结构的 ORM
Posted
技术标签:
【中文标题】从类生成数据库结构的 ORM【英文标题】:ORMs that generate database structures from classes 【发布时间】:2008-12-18 03:07:21 【问题描述】:我研究过 NHibernate 和 EntitySpaces,它们的工作方式似乎不同。
在 EntitySpaces 中,您定义数据库表和表关系,并为您生成类。
在 NHibernate 中,您定义类并为您生成表关系。这就是我要找的。p>
是否有任何其他 ASP.NET ORM 可以从 NHibernate 等类生成表? 有什么建议吗?
【问题讨论】:
从对象端开始并自动生成数据库端对我来说似乎是一个非常糟糕的主意。它不可能产生一个“好的”数据库设计。只是我的 2c 但是反过来,它不会生成好的对象模型! 我理解你的问题,但是根据自动生成表关系的能力选择 ORM 可能是个坏主意。我总是不得不调整设计器/生成器的输出。 这取决于您认为模型的“主要”具体化是什么。您的数据库模型是主要的,对象模型是派生的,或者相反。 nhibernate 不会自己生成 db 模型,你仍然需要做对象属性到 db 字段的映射,定义它的数据类型等等。在你完成这个 nhibernate 之后,你可以选择在指定的 dbms 中自动创建 db 模型。 db 模型的好坏仍然取决于您:) 【参考方案1】:DataObjects.Net 也使用“代码优先”(Model first)的方法。 见http://wiki.dataobjects.net/index.php?title=Features
【讨论】:
【参考方案2】:Linq to SQL 可以使用dataContext.CreateDatabase() 方法从类中创建数据库表结构和关系。
【讨论】:
【参考方案3】:Mindscape LightSpeed 提供此功能 - 完整方案往返的一部分。
希望对你有帮助
http://www.mindscape.co.nz/blog/index.php/2008/06/17/schema-round-tripping-in-the-lightspeed-designer/
【讨论】:
是的,但是 Lightspeed 没有提供非常开放的设计选择...复合键几乎/很少支持,并且每个 Mindscapes 自己的网站“我们不希望主键有任何商业价值”。嗯。伟大的。直到它不是。【参考方案4】:我更喜欢一种我可以完全控制的方法来生成我需要的东西。在 ORM 的情况下,我得到了与我的表匹配的类。我相信使用我自己的源自我的业务的对象域而不是底层数据存储是正确的方法。代表我的业务数据的类层次结构应该 100% 独立于数据存储。
【讨论】:
【参考方案5】:LightSpeed 有一个非常好的 Visual Studio 设计器,它支持从数据库生成 .NET 实体类和从您的 .NET 实体更新数据库。
【讨论】:
【参考方案6】:这是 NHibernate 所做的事情。
关于这个主题(那个 Draemon)开始了。我个人的观点是,除非性能是您绝对的第一要务,并且所有其他事情都必须受到影响才能实现这一点(例如,在为制造工厂编写软件时),否则您最好先处理领域模型。
我的理由是:与对数据库本身进行编码相比,对域进行编码所花费的时间要多得多——尤其是在使用 orm 时。所以要明智地度过这段时间。
【讨论】:
【参考方案7】:我在使用 Genome ORM 方面取得了相当大的成功。它为你做了很多工作。您可以首先设计您的域模型,然后从中生成数据库脚本。除了这个基因组为你生成 DTO。它在这方面做得很好,并为开发人员节省了大量时间。
http://www.genom-e.com
【讨论】:
以上是关于从类生成数据库结构的 ORM的主要内容,如果未能解决你的问题,请参考以下文章
golang中orm或gorm或json序列化结构体时零值的处理