C# EF 6代码优先迁移与dbinitializer
当我启动第一个EF时,我在构造函数中使用DbContext with Database.SetInitializer从DropCreateDatabaseAlways调用派生类,然后我可以从头开始删除并重新创建数据库,但是我遇到了一个跨迁移的问题,我完全不知道为什么要使用迁移而不是我以前的方法?我还注意到DropCreateDatabaseAlways不能与IdentityDbContext一起工作。我得到了一个错误:支持“IdentityDb”上下文的模型在数据库创建后发生了更改。考虑使用代码第一迁移来更新数据库http://go.microsoft.com/fwlink/?LinkId=238269. 迁移与dbinitializer 如果目的相同,为什么要在dbinitializer上使用迁移?C# EF 6代码优先迁移与dbinitializer,c#,asp.net,asp.net-mvc,entity-framework,C#,Asp.net,Asp.net Mvc,Entity Framework,当我启动第一个EF时,我在构造函数中使用DbContext with Database.SetInitializer从DropCreateDatabaseAlways调用派生类,然后我可以从头开始删除并重新创建数据库,但是我遇到了一个跨迁移的问题,我完全不知道为什么要使用迁移而不是我以前的方法?我还注意到DropCreateDatabaseAlways不能与IdentityDbContext一起工作。我得到了一个错误:支持“IdentityDb”上下文的模型在数据库创建后发生了更改。考虑使用代码
也许我在比较两件不同的事情,但我能说的是我完全迷路了。你说你自己正在删除数据库。迁移保留数据。这是一个巨大的优势——我想您肯定不想在生产中删除数据库。您自己说过要删除数据库。迁移保留数据。这是一个巨大的优势——我想您肯定不想在生产中删除数据库。DbInitializer从头开始创建数据库。就这样 迁移提供的不仅仅是dbinitializer 数据库版本控制 迁移允许您保存对数据库所做的每个更改,存储每个数据库更新,最终创建修订检查点。类似于源代码管理,如果您熟悉的话 您可以向前或向后迁移到特定版本。例如,您可以从最新版本4降级到版本2,这样只会丢失删除的列/表中的数据 假设您的数据库在版本4中是这样的
Version 4
ID | FirstName | LastName
--------------------------------
1 | John | Smith
2 | Michael | Smith
版本2没有LastName列,如果您从4迁移到2,这意味着您将保留ID和FirstName的数据
提取Sql脚本
迁移允许您创建升级和降级sql脚本。使用DbInitializer,您将如何更新生产数据库?手动?创建一个冰雹玛丽脚本
通过迁移,如果部署过程中出现问题,部署团队可以轻松地降级数据库,而不会造成任何损害
附加数据库注释
通过迁移,您可以自定义数据库的外观。例如:具有默认值的列?移民帮了你的忙
数据运动
我假设您的数据库还没有任何必需的初始数据,比如DropDownList选项的项目。通过迁移,您可以自定义更新sql脚本以设置初始数据。例如:国家名单
另一个场景是移动数据,假设您决定将列名拆分为FirstName和LastName
重新开始
当然,迁移允许您从头开始创建数据库,就像DbInitializer一样
教程:DbInitializer从头开始创建数据库。就这样 迁移提供的不仅仅是dbinitializer 数据库版本控制 迁移允许您保存对数据库所做的每个更改,存储每个数据库更新,最终创建修订检查点。类似于源代码管理,如果您熟悉的话 您可以向前或向后迁移到特定版本。例如,您可以从最新版本4降级到版本2,这样只会丢失删除的列/表中的数据 假设您的数据库在版本4中是这样的
Version 4
ID | FirstName | LastName
--------------------------------
1 | John | Smith
2 | Michael | Smith
版本2没有LastName列,如果您从4迁移到2,这意味着您将保留ID和FirstName的数据
提取Sql脚本
迁移允许您创建升级和降级sql脚本。使用DbInitializer,您将如何更新生产数据库?手动?创建一个冰雹玛丽脚本
通过迁移,如果部署过程中出现问题,部署团队可以轻松地降级数据库,而不会造成任何损害
附加数据库注释
通过迁移,您可以自定义数据库的外观。例如:具有默认值的列?移民帮了你的忙
数据运动
我假设您的数据库还没有任何必需的初始数据,比如DropDownList选项的项目。通过迁移,您可以自定义更新sql脚本以设置初始数据。例如:国家名单
另一个场景是移动数据,假设您决定将列名拆分为FirstName和LastName
重新开始
当然,迁移允许您从头开始创建数据库,就像DbInitializer一样
教程:如果我不介意删除我的数据库,那么development env呢?数据库的存在就是为了保存数据。您打算如何在不删除数据的情况下修改生产模式?开发环境呢
我不介意删除数据库的地方?数据库的存在是为了保存数据。您打算如何在不删除数据的情况下修改生产架构?