实体框架迁移,我不;没有访问生产sql server的权限

本文关键字:sql server 权限 访问 迁移 框架 我不 实体 | 更新日期: 2023-09-27 18:26:39

当前在QA中,当我收到数据库已更改的错误消息时,我只需将数据库放入QA。

在生产中,我无法直接从开发机器访问数据库,因此无法直接在生产数据库上运行迁移。

我该怎么办?

我可以在生产中禁用更改跟踪,只需通过添加新列等手动修改数据库吗?

我使用的是EF 6.1.1

实体框架迁移,我不;没有访问生产sql server的权限

除了根据@stevenrcfox将数据库初始值设定项设置为null之外,您可能还需要考虑生成一个脚本,提供给DBA以更新数据库。这通常在DBA需要审查流程的情况下很有用,并且在执行SQL之前需要查看并可能修改SQL

要实现这一点,您可以从包管理器控制台或migrate.exe生成一个脚本,该脚本将在两个特定迁移之间移动数据库。例如,直接来自get-help update-database -detailed:

C:'PS>Update-Database -Script -SourceMigration Second -TargetMigration First
# Generate a script to migrate the database from a specified start migration
# named "Second" to a specified target migration named "First"

或者,如果您不知道生产数据库当前的版本,您可以生成一个大型脚本,负责从任何版本升级。同样,从实体框架NuGet powershell命令帮助:

C:'PS>Update-Database -Script -SourceMigration $InitialDatabase
# Generate a script that can upgrade a database currently at any version to the latest version. 
# The generated script includes logic to check the __MigrationsHistory table and only apply changes 
# that haven't been previously applied.

不过,DBA可能不喜欢最后一个迁移的结果,因为它的长度和许多不相关的脚本,因为生产数据库可能只需要最后几次迁移。

DBA可以使用migrate.exe从命令行应用迁移。

请注意,术语"变更跟踪"是指"跟踪实体中的变更"。它在某种程度上与模型/数据库的更改无关。

您可以将数据库初始化程序设置为null,我假设您所说的"禁用更改跟踪"是什么意思

这可以通过执行以下操作来实现:

Database.SetInitializer<context>(null);

您的初始化程序很可能设置为MigrateDatabaseToLatestVersion(可能在web.config中)

在生产中不使用迁移可能是最安全的,您的应用程序可能没有权限在生产中编辑表结构!