首先是实体框架代码 - 如何为生产数据库运行Update-Database

iro*_*man 69 c# asp.net-mvc entity-framework

我想知道如何为生产数据库运行'Update-Database'命令.

"更新 - 数据库"数据库在我的本地计算机上运行良好,但如何使其适用于生产数据?

因此,如果我对我的应用程序进行更改,然后通过visual studio运行"发布",这对于代码方面的工作正常,但是如何为生产数据运行"Update-Database"命令.

希望这个问题有道理......

谢谢,

Dav*_*ore 32

请参阅在生产中使用实体框架(代码优先)迁移,以便在实体框架初始化时应用程序自动更新数据库.

现在,如果您更熟悉手动控制迁移,可以使用开发人员计算机上的Update-Database命令的-Script参数生成SQL脚本,然后可以对生产数据库运行这些脚本.

http://msdn.microsoft.com/en-us/data/jj591621.aspx(请参阅获取SQL脚本部分)


NSG*_*aga 24

添加@David已经说过的内容......

就个人而言,我不相信automatic updates"实时"场景,我总是喜欢手动数据库管理(即permissions创建或改变Db需要一个问题- 更不用说共享主机等) - 但是从我所看到的在同步时,迁移是非常可靠的(实际上,通常是"解开"它们的唯一方法是删除Db并强制执行完全/新的更新).

这里是一个后我做了前段时间关于如何scriptsynchronize database / code朝部署方案(当出现问题)为目标.它不适用于你(还),但要记住一些事情.

MVC3和Code First Migrations - "创建数据库后,支持'blah'上下文的模型已经改变"

  • 为什么这么复杂?在应用程序启动/首次使用上下文时自动运行迁移代码有什么问题?SQL脚本如何比调用C#方法更好? (2认同)
  • @FlorianWinter 在理想条件和相对简单的场景中是正确的,并且如果您知道自己在做什么(例如数据库管理和迁移表)。但是迟早你会遇到一些问题,不同步等。而且你有实时数据,无论如何都不能触及。我真的不相信迁移或任何初始化程序可以为我完成这项工作。这来自我多年来看到的无数问题。因此,当使用数据时,我喜欢完全控制。我可以让应用程序运行并“自行迁移”,但只有在我重新检查之后。和缩放等。 (2认同)

Flo*_*ter 6

您是否只想在您的应用程序运行(开发和生产)的时间和地点自动将数据库更新到最新版本?

这可能不是一个好主意,除非在您知道可以信任自动迁移并且手动迁移数据库不可行的非常简单的场景中。请参阅此答案:https : //stackoverflow.com/a/15718190/2279059。如果您忽略此警告,请继续阅读。

将以下内容添加到web.config

<entityFramework>
<contexts>
  <context type="MyAssembly.MyContext, MyAssembly" disableDatabaseInitialization="false">
    <databaseInitializer type="System.Data.Entity.MigrateDatabaseToLatestVersion`2[[MyAssembly.MyContext, MyAssembly], [MyAssembly.Migrations.Configuration, MyAssembly]], EntityFramework" />
  </context>
</contexts>
Run Code Online (Sandbox Code Playgroud)

这可能看起来很吓人,但它与以下代码基本相同:

Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyContext, Migrations.Configuration>());
Run Code Online (Sandbox Code Playgroud)

如果您没有运气web.config,那么您也可以尝试将此代码放入Global.asax. 我个人更喜欢配置而不是代码。

如果你想让你的配置文件看起来更简洁,你还可以从模板MigrateDatabaseToLatestVersion类派生一个新类,这样你就不需要使用神秘的语法在web.cofig文件中传递类型参数:

public class MyDatabaseInitializer : public MigrateDatabaseToLatestVersion<MyContext, Migrations.Configuration> {}
Run Code Online (Sandbox Code Playgroud)

这样做是设置一个数据库初始化程序,它会自动将数据库更新到最新版本。

(来源和更多详细信息:http : //www.ralphlavelle.net/2012/09/entity-framework-code-first-webconfig.html


M. *_*uiz 5

您可以使用生产连接字符串运行Update-Database EF Tools 命令,如下所示:

Update-Database -Args '--environment Production'
Run Code Online (Sandbox Code Playgroud)

来源:https ://learn.microsoft.com/en-us/ef/core/cli/powershell#aspnet-core-environment

正如其他人所说,您必须格外小心,您绝对应该首先在暂存环境中尝试。