从 .NET 中的域对象创建数据库架构

Posted

技术标签:

【中文标题】从 .NET 中的域对象创建数据库架构【英文标题】:Create db schema from domain objects in .NET 【发布时间】:2009-05-11 16:04:12 【问题描述】:

在 EJB 3.0 中,您可以编写域对象,然后将它们转换为实体(添加 @Entity 属性等),并且底层 JPA 机制(比如说 Hibernate)可以自动生成数据库模式。更好的是,当您在 Java 代码中更新域模型时,它还会更新 db。

我正在寻找 .NET 平台上的等效功能。是否可以使用 ADO.NET Entity Framework?

【问题讨论】:

【参考方案1】:

DataObjects.Net 还根据域模型自动生成和升级数据库模式。但最有趣的是如果模型和数据库模式发生变化,如何升级存储的数据。 是否可以在实体级别执行此操作,而不是使用低级 SQL?

【讨论】:

【参考方案2】:

Mindscape LightSpeed 支持这一点 - 模型优先或数据库优先开发的完整模式往返。它是一个商业产品,但有一个用于小型数据库的免费版本。

如前所述,Entity Framework 将在其下一个版本中添加其中一些功能,但这需要一段时间。

Details of the LightSpeed designer with the model first support

【讨论】:

【参考方案3】:

Active Record 是前进的方向!你用属性标记你的对象,然后你可以从那里生成数据库模式或数据库本身。还有一个名为Active Writer 的工具,它允许您绘制模型并为您编写具有正确属性的代码。

它本质上是 NHibernate 的包装器,但是当您在对象上而不是在 XML 文档中进行映射时,它使事情变得更容易。

我们已经在多个项目中使用了它,发现它是实现复杂系统的一种快速方法。

【讨论】:

【参考方案4】:

是的 - 未来 :-) 当前的实体框架不支持“域优先”方法 - 但下一个版本 (EF v4) 将支持。这将随 .NET 4.0 / Visual Studio 2010 一起提供 - 但不要问我,什么时候!我不知道(微软也不知道)。

马克

【讨论】:

【参考方案5】:

NHibernate 是 Hibernate 的 .NET 端口,我认为它包括为您的实体生成数据库架构的工具。

【讨论】:

【参考方案6】:

现在 .NET 中有第三方框架可以做到这一点。

【讨论】:

以上是关于从 .NET 中的域对象创建数据库架构的主要内容,如果未能解决你的问题,请参考以下文章

在洋葱、六边形或干净架构中,域模型是不是可以包含与数据库中的域模型不同的属性?

Spring Batch -元数据模式

从asp.net中的视图创建和选择数据没有发生?

如何使用微服务架构处理共享数据源

在哪里放置需要从数据库中获取数据的域逻辑

在 Snowflake DWH 中撤销从架构创建表