1

我们有几个旧的 SQL Server 数据库,我们偶尔会对它们进行架构更改。我们目前有一个用 C++ 编写的实用程序,允许用户使用这些模式更改来更新他们的数据库。该实用程序当前生成动态 sql 以创建所有 DB 对象。我正在考虑重做这一点,并认为 EF 迁移可能是一个好方法。我已经阅读了一些关于该主题的内容,并且对它的工作原理有一个大致的了解。但是我很难弄清楚如何设置它来替换我们当前的程序(或者是否有可能)。目前,客户端可以在多个先前版本中的任何一个上。我假设我必须回到最旧的版本并从中创建我的模型/初始迁移,然后为每个版本更改生成增量迁移,以支持所有版本的更新。这是一个正确的假设吗?此外,目前我们的客户可能正在使用 sql server 2000、2005 或 2008。这会对我的设置方式(或者我什至可以)产生任何影响吗?此外,目标是创建一个带有(C# - 可能是 WPF)UI 的实用程序,用户可以使用它来操作迁移(最好是向上或向下)。我已经看到了很多关于如何从包管理器中的命令行操作迁移的示例,但没有看到很多关于如何创建具有友好 UI 的实用程序以在生产中升级/降级 DB 的实用程序。此外,我还没有看到任何显示如何在迁移中创建存储过程的东西(我们的数据库依赖于一些存储过程)。我假设,如果没有别的,我可以使用 Sql() 方法生成 SQL 查询来创建 SP。那是对的吗?有没有更好的办法?

我知道我的问题有点不具体,对此我深表歉意。但我仍处于学习这一点的开始过程中,我想知道这是否是一个好方法。任何指导将不胜感激。

谢谢,丹尼斯

4

1 回答 1

0

首先,关于 SQL Server 支持,Entity Framework 并不真正支持 SQL Server 2000。请参阅这个问题: EntityFramework SQL Server 2000?

关于支持所有多个版本的问题,您有正确的想法,即首先需要为最旧的版本生成初始迁移,然后逐步更改模型并生成迁移以支持更高版本。这将是一件痛苦的事情,因为迁移对于它们如何在数据库中表示模型是固执己见的,并且您将做很多事情以最终得到一个模型和一组完全代表它的迁移。具体关注点是索引、列长度、数据类型、存储过程、触发器、函数、分区。

Sql()功能可以帮助您解决大多数问题,但在迁移中也有帮助的是 和 之类的CreateIndex功能AlterColumn

为了自动化这一点,迁移绝对可以作为 powershell cmdlet 使用,它们本身就是 .Net 对象,因此可以通过编程方式调用。

由于这个问题已经存在一年了,我假设您已经决定是否要这样做。我的观点是,很难看出它值得付出努力。如果您将使用此数据库的代码库重新平台化为实体框架,那么这将是有意义的。否则肯定会有更好的工具用于数据库版本管理。我的第一个停靠港是 Redgate。

于 2013-10-25T07:59:55.353 回答