Codefirst 和迁移
Codefirst and migrations
当应用程序处于实时状态时,显然需要一种迭代方法来更改数据库。在 db first world 中,我会更改 databaae 项目中的对象(例如,添加到 table 的列),然后部署(重新创建)到我的本地实例,然后用新的替换旧的 table我的 edmx - 当它开始运行时,与实时数据库模式的副本相比,数据库项目会生成一个增量脚本。听起来很啰嗦,但在一天结束时我只做了一次更改(数据库项目中的对象) - 其他所有内容都已生成
首先转到代码 (EF6),我期待类似的更改体验 - 即我将 属性 添加到 class - 但是我还需要添加迁移脚本吗?
我一直在阅读,似乎很多人建议禁用迁移以获得更多控制权 - 我很困惑 - 我有一个简单的部署应用程序的愿景,并且更改会在下次应用程序时自动反映在目标数据库中运行 - 有一件事是肯定的,我不想手动编写单独的部署脚本(或迁移代码)。如前所述,我对最后一部分感到困惑 - 谁能澄清 - 指出选项
非常感谢
简短的回答是不需要创建 'migration script',你是对的,因为如果你愿意,EF 会为你处理。我认为当您阅读有关禁用迁移的内容时,您可能实际上正在阅读 'disable automatic migrations';无论如何,EF 仍会生成迁移。
正如您所指出的,开发过程中有两个更改过程:首先更改 class,然后打开程序包管理器控制台并调用 Add-Migration
。通常,这就是您所要做的全部,EF 会为您生成更改代码。然后,您调用 Update-Database
它就可以了。部署时,您将连接到目标数据库并调用 Update-Database
一次,它将应用所有待处理的迁移。
您还可以启用跳过 Add-Migration
步骤的自动迁移,但我总是喜欢查看生成的代码。叫我老派 ;)
当您需要对视图、SPROCS 和 UDF 的支持时,它会变得更加复杂,但是有很多方法可以完成您想要做的大部分事情。而且,即使将更改输出到数据库是一个 2(3?)步骤的过程,它仍然比您自己单独更改数据库和代码要容易得多。
然后,您可以按照步骤 here 设置您的部署,以便在您的 EF 在与生产数据库的连接上初始化后,它会自动应用更新。同样,为了安全起见,我建议您自己(通过包管理器控制台)进行操作,但这不是必需的。
当应用程序处于实时状态时,显然需要一种迭代方法来更改数据库。在 db first world 中,我会更改 databaae 项目中的对象(例如,添加到 table 的列),然后部署(重新创建)到我的本地实例,然后用新的替换旧的 table我的 edmx - 当它开始运行时,与实时数据库模式的副本相比,数据库项目会生成一个增量脚本。听起来很啰嗦,但在一天结束时我只做了一次更改(数据库项目中的对象) - 其他所有内容都已生成
首先转到代码 (EF6),我期待类似的更改体验 - 即我将 属性 添加到 class - 但是我还需要添加迁移脚本吗?
我一直在阅读,似乎很多人建议禁用迁移以获得更多控制权 - 我很困惑 - 我有一个简单的部署应用程序的愿景,并且更改会在下次应用程序时自动反映在目标数据库中运行 - 有一件事是肯定的,我不想手动编写单独的部署脚本(或迁移代码)。如前所述,我对最后一部分感到困惑 - 谁能澄清 - 指出选项
非常感谢
简短的回答是不需要创建 'migration script',你是对的,因为如果你愿意,EF 会为你处理。我认为当您阅读有关禁用迁移的内容时,您可能实际上正在阅读 'disable automatic migrations';无论如何,EF 仍会生成迁移。
正如您所指出的,开发过程中有两个更改过程:首先更改 class,然后打开程序包管理器控制台并调用 Add-Migration
。通常,这就是您所要做的全部,EF 会为您生成更改代码。然后,您调用 Update-Database
它就可以了。部署时,您将连接到目标数据库并调用 Update-Database
一次,它将应用所有待处理的迁移。
您还可以启用跳过 Add-Migration
步骤的自动迁移,但我总是喜欢查看生成的代码。叫我老派 ;)
当您需要对视图、SPROCS 和 UDF 的支持时,它会变得更加复杂,但是有很多方法可以完成您想要做的大部分事情。而且,即使将更改输出到数据库是一个 2(3?)步骤的过程,它仍然比您自己单独更改数据库和代码要容易得多。
然后,您可以按照步骤 here 设置您的部署,以便在您的 EF 在与生产数据库的连接上初始化后,它会自动应用更新。同样,为了安全起见,我建议您自己(通过包管理器控制台)进行操作,但这不是必需的。