Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# EF 6代码优先迁移与dbinitializer_C#_Asp.net_Asp.net Mvc_Entity Framework - Fatal编程技术网

C# EF 6代码优先迁移与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”上下文的模型在数据库创建后发生了更改。考虑使用代码

当我启动第一个EF时,我在构造函数中使用DbContext with Database.SetInitializer从DropCreateDatabaseAlways调用派生类,然后我可以从头开始删除并重新创建数据库,但是我遇到了一个跨迁移的问题,我完全不知道为什么要使用迁移而不是我以前的方法?我还注意到DropCreateDatabaseAlways不能与IdentityDbContext一起工作。我得到了一个错误:支持“IdentityDb”上下文的模型在数据库创建后发生了更改。考虑使用代码第一迁移来更新数据库http://go.microsoft.com/fwlink/?LinkId=238269.

迁移与dbinitializer 如果目的相同,为什么要在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一样


教程:

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呢?数据库的存在就是为了保存数据。您打算如何在不删除数据的情况下修改生产模式?开发环境呢
我不介意删除数据库的地方?数据库的存在是为了保存数据。您打算如何在不删除数据的情况下修改生产架构?