20.1翻译系列:EF 6中自动数据迁移技术【EF 6 Code-First系列】

原文连接:https://www.entityframeworktutorial.net/code-first/automated-migration-in-code-first.aspxhtml

 

EF 6 Code-First系列文章目录:数据库

 

 

Entity Framework介绍了自动迁移技术,因此每次实体发生改变的时候,你不用手动去处理数据库迁移。app

自动迁移技术能够经过在程序包管理控制台中输入并执行:enable-migrations命令作到。打开程序包管理控制台,输入:enable-migrations –EnableAutomaticMigration:$true【确保默认的项目是你如今要执行的项目】less

当命令执行成功以后,将会建立一个internal sealed Configuration 类,这个Configuration类继承自DbMigrationConfiguration :ide

正如你在COnfiguration类的构造函数中看到的那样,AutomaticMigrationsEnabled 被设置为true.函数

下一步,就是在上下文类中设置数据库初始化策略为MigrateDatabaseToLatestVersion:测试

public class SchoolContext: DbContext { public SchoolDBContext(): base("SchoolDB") { Database.SetInitializer(new MigrateDatabaseToLatestVersion<SchoolDBContext, EF6Console.Migrations.Configuration>()); } public DbSet<Student> Students { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); } }

如今你就完成了自动化迁移技术的配置。当实体发生改变的时候,EF将会自动进行数据库迁移。目前为止,咱们只有一个Student实体,还有一个上下文类,咱们运行项目看看生成的数据库:ui

你将会发现EF API建立了__MigrationHistory 表和Students表。__MigrationHistory 包含了每次数据库迁移的历史记录。spa

如今,你添加一个新的领域类实体,运行程序,会发现数据库自动包含了全部实体所映射的表。你不用运行任何其余命令。.net

然而,这样只是针对添加实体或者移除实体才有用,当你向实体中添加、修改或者删除属性的时候,并不起做用。删除领域类的任何一个属性,运行项目:

这样是由于你将会丢失相应列的数据。为了解决这个,你须要在Configuration类的构造函数中,设置AutomaticMigrationDataLossAllowed 为true,而且设置AutomaticMigrationsEnabled = true。

为了了解更多enable-migrations命令的参数,能够执行get-help enable-migrations 或者get-help enable-migrations -detailed,你将会看到:

PM> get-help enable-migrations NAME Enable-Migrations SYNOPSIS Enables Code First Migrations in a project. SYNTAX Enable-Migrations [-ContextTypeName <String>] [-EnableAutomaticMigrations] [-MigrationsDirectory <String>] [-ProjectName <String>] [-StartUpProjectName <String>] [-ContextProjectName <String>] [-ConnectionStringName <String>] [-Force] [-ContextAssemblyName <String>] [-AppDomainBaseDirectory <String>] [<CommonParameters>] Enable-Migrations [-ContextTypeName <String>] [-EnableAutomaticMigrations] [-MigrationsDirectory <String>] [-ProjectName <String>] [-StartUpProjectName <String>] [-ContextProjectName <String>] -ConnectionString <String> 
    -ConnectionProviderName <String> [-Force] [-ContextAssemblyName <String>] [-AppDomainBaseDirectory <String>] [<CommonParameters>] DESCRIPTION Enables Migrations by scaffolding a migrations configuration class in the project. If the target database was created by an initializer, an initial migration will be created (unless automatic migrations are enabled via the EnableAutomaticMigrations parameter). RELATED LINKS REMARKS To see the examples, type: "get-help Enable-Migrations -examples". For more information, type: "get-help Enable-Migrations -detailed". For technical information, type: "get-help Enable-Migrations -full".
相关文章
相关标签/搜索