gpt4 book ai didi

c# - EF 6 代码优先迁移与 dbinitializer

转载 作者:太空宇宙 更新时间:2023-11-03 20:06:02 24 4
gpt4 key购买 nike

当我开始我的第一个 EF 时,我使用了 DbContextDatabase.SetInitializer在从 DropCreateDatabaseAlways<MyDbContext> 调用派生类的构造函数中然后我可以从头开始重新创建数据库,但是我遇到了迁移,我完全不知道为什么要使用迁移而不是我的旧方法?我也注意到 DropCreateDatabaseAlways<MyDbContext>不适用于 IdentityDbContext我收到错误:The model backing the 'IdentityDb' context has changed since the database was created. Consider using Code First Migrations to update the database (http://go.microsoft.com/fwlink/?LinkId=238269).

迁移与 ​​dbinitializer如果目的相同,为什么要使用 Migration 而不是 dbinitializer ?也许我正在比较两种不同的东西,但我只能说我完全迷路了。

最佳答案

DbInitializer 从头开始​​创建该数据库。就是这样。

迁移提供的不仅仅是 DbIntitializer。

数据库版本控制

迁移允许您保存对数据库所做的所有更改,存储每个数据库更新,最终创建修订检查点。如果您熟悉的话,类似于源代码管理

您可以向前或向后迁移到特定版本。例如,您可以从版本 4(最新)降级到版本 2,并且只会丢失您删除的列/表中的数据。

假设您的数据库在版本 4 中看起来像这样。

Version 4
ID | FirstName | LastName
--------------------------------
1 | John | Smith
2 | Michael | Smith

版本 2 没有 LastName列,如果您从 4 迁移到 2,这意味着您将保留 ID 的数据和 FirstName .

Version 2
ID | FirstName
-----------------
1 | John
2 | Michael

提取Sql脚本

迁移允许您创建升级和降级 sql 脚本。使用 DbInitializer,您打算如何更新生产数据库?手动?创建冰雹玛丽脚本?

通过迁移,如果在部署过程中出现问题,部署团队可以轻松降级数据库(无害)

额外的数据库注释

通过迁移,您可以自定义数据库的外观。例如:具有默认值的列?迁移让您满意。

数据运动

我假设您的数据库还没有任何必需的 初始数据,例如 DropDownList 选项的项目。使用 Migration,您可以自定义更新 sql 脚本以设置初始数据。例如:国家列表。

另一种情况是移动您的数据,假设您决定将 Name 列拆分为 FirstName 和 LastName。

新的开始

当然,Migration 允许您从头开始创建数据库,就像 DbInitializer。

教程: http://msdn.microsoft.com/en-us/data/jj591621

关于c# - EF 6 代码优先迁移与 dbinitializer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23366367/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com