【问题标题】:Migrating Database in a N-Tier Application with Entity Framework Codefirst使用实体框架代码优先迁移 N 层应用程序中的数据库
【发布时间】:2016-12-08 14:48:19
【问题描述】:

我正在尝试在我的分层项目结构中使用实体框架代码优先方法创建数据库。我使用标准的代码优先控制台命令;

  • 启用迁移 => 好的
  • add-migration Init => 问题:它不会产生迁移代码,只有 up 和 down 方法
  • update-database => 无事可做;没有变化

如何以分层结构执行此迁移?如何跟踪迁移更改?

您可以在 github 上查看我的代码:https://github.com/srht/layeredIdentity

在github上的代码中;它曾经创建过初始化迁移,但在我删除数据库后它没有创建这样的初始迁移代码。

【问题讨论】:

    标签: c# asp.net entity-framework n-tier-architecture


    【解决方案1】:

    ...只有 up 和 down 方法...

    这就是迁移的工作方式,当您执行 Update-Database 时,总会有隐式的源迁移和目标迁移,因此 EF 会增量应用这两个源和目标之间迁移的所有 Up 方法(或者 Down 方法,如果您正在降级您的数据库)。 EF 生成要应用于每个迁移的 SQL 代码,如果您想查看它,可以使用 -script 参数运行 Update-Database。这样不会执行任何更改,您可以检查生成的 SQL。

    如何跟踪迁移更改?

    有一个名为__MigrationsHistory 的表。当您运行Update-Database 时,EF 会在该表中为应用的每个迁移插入一条记录。下次您更改模型类的代码时,您必须通过运行Add-Migration YourNewMigrationName 生成新的增量迁移。当您运行 Add-Migration 时,EF 会检测到自上次迁移以来模型中的增量更改,并生成仅包含这些更改的新迁移。迁移文件名包含时间戳,以便及时排序。

    如果您运行Update-Database 并且没有任何反应,那是因为您的数据库是最新的,所有待处理的迁移都已应用。您应该在控制台中收到一些消息,告诉“没有要应用的显式迁移”或类似的东西。如果您收到其他关于仍有待处理迁移的消息,或一些错误消息,则说明出了点问题。

    Here 您从 Msdn 获得了有关迁移工作原理的更多信息。

    【讨论】:

    • 那么分层解决方案有什么不同吗?是否有任何额外的东西可以运行迁移?因为标准迁移命令不会创建迁移代码; up 和 down 方法都是空白的。正如你提到的,我已经删除了数据库中的迁移表,而不是跟踪和重新开始。但它没有生成迁移代码。
    猜你喜欢
    • 2015-11-06
    • 1970-01-01
    • 2013-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多