当数据库发生变化时,你如何管理你的 ORM 层?

Posted

技术标签:

【中文标题】当数据库发生变化时,你如何管理你的 ORM 层?【英文标题】:How do you manage your ORM layer when database undergoes changes? 【发布时间】:2009-02-05 17:28:23 【问题描述】:

我了解不自动刷新 .dbml (Linq2Sql)、.edmx (Linq2Entities) 或 .hbm.xml (NHibernate) 的原因。在每个 ORM 解决方案中,如果您在数据库中有更改,则需要更新这些文件。 如果您 100% 确定不会破坏任何内容,有没有办法自动刷新这些文件?

我相当熟悉 RoR 中的迁移。 .NET 世界中是否有可靠的迁移工具?

一般来说,您如何在数据库设计方面保持敏捷,而不是一次又一次地手动重新创建这些映射文件?

如果此问题重复,请提供链接。我找不到。

【问题讨论】:

【参考方案1】:

我不确定您对更新 EDMX 有何犹豫。继续并从数据库中更新您的模型。很有可能它会起作用。但如果没有,只需从源代码管理中获取旧版本,然后手动进行更改。

另一方面,使用 LINQ to SQL 就更难了,因为没有更新功能。您必须从模型中删除更改的对象,重新添加它们,然后手动重新应用您所做的任何更改。同样,源代码控制在这里至关重要。您需要将 XML 文件与以前的版本进行比较,以确保您没有忘记任何内容。

我不确定您关于迁移的问题是什么意思。是的,有一个工具 (RikMigrations),它的作用与 Rails 中的迁移类似。但是迁移当然会改变你的数据库元数据。它们不会更改您的 ORM 映射。这是在其他地方完成的,在 Rails 和 .NET 中。

【讨论】:

我的问题是删除并再次拖放 edmx。它有点重复 你在考虑 Linq to SQL 吗? EDMX 是实体框架,不需要它。

以上是关于当数据库发生变化时,你如何管理你的 ORM 层?的主要内容,如果未能解决你的问题,请参考以下文章

React 仅仅只是你的界限

使用 ORM 时,如何安全地跨层发送加载的实体

如何创建栅格系统?

如何在并行的Bash中使用你的整个CPU

当所有依赖项都发生变化时使用效果?

版本管理·玩转git(日志查看与版本切换)