首页 技术 正文
技术 2022年11月19日
0 收藏 913 点赞 4,256 浏览 2245 个字

使用Code First的话对于实体字段或者表映射修改都需要使用迁移操作,下面列出操作具体步骤

1、创建映射类和实体,本文主要是讲解迁移步骤,其他代码则没有列出

     public class ProductMap : EntityTypeConfiguration<Product>
{
public ProductMap()
{
ToTable("Product"); //指定表明
HasKey(p => p.Id); //指定主键
}
}
     public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
}

2、假设现在Product类Name要设置为非空和最大长度为200

     public class ProductMap : EntityTypeConfiguration<Product>
{
public ProductMap()
{
ToTable("Product"); //指定表明
HasKey(p => p.Id); //指定主键
Property(p => p.Name).IsRequired().HasMaxLength();
}
}

如果运行程序则会报错

EntityFramework之迁移操作(五)

具体操作

启用迁移需要在VS的程序包管理控制台输入命令来完成,如果有多个项目,记得选择对应项目

EntityFramework之迁移操作(五)

命令:Enable-Migrations

输入命令后会创建一个文件夹Migrations其中有个Configuration文件

     internal sealed class Configuration : DbMigrationsConfiguration<MigrationOpt.Models.EntityContext>
{
public Configuration()
{
AutomaticMigrationsEnabled = false;
ContextKey = "MigrationOpt.Models.EntityContext";
} protected override void Seed(MigrationOpt.Models.EntityContext context)
{ }
}

AutomaticMigrationsEnabled设置为true表示自动迁移,为false则需要手动迁移

Seed方法是在迁移过程数据库Schema成功应用以后执行的操作,可以利用这个方法添加一些初始化数据:

 protected override void Seed(SchoolContext context)
{
context.Set<Student>().AddOrUpdate(
p => p.StudentName,
new Student { StudentName = "张三" },
new Student { StudentName = "李四" },
new Student { StudentName = "王五" }
);
}

1、自动迁移

如果需要使用自动迁移的话,除了设置AutomaticMigrationsEnabled设置为true,还需要在DbContext构造函数中写上这句

Database.SetInitializer(new MigrateDatabaseToLatestVersion<EntityContext, Configuration>(“DBConnectionString”));

例如:

         public EntityContext()
: base("name=DBConnectionString")
{
Database.SetInitializer(new MigrateDatabaseToLatestVersion<EntityContext, Configuration>("DBConnectionString"));
}

2、手动迁移

如果不喜欢自动迁移,可以手工完成这个操作。手工迁移的好处后,可以随时退回到某个指定的迁移版本。迁移文件也可以进行版本管理有利于团队开发。

首先把Configuration构造函数中AutomaticMigrationsEnabled置为false,表示不使用自动迁移。

手动迁移的操作也是在程序包管理控制台使用PowerShell来完成,在每次更改实体或映射配置后,我们运行下面这个命令来生成一个迁移文件:

Add-Migration ChangeSet1

Add-Migration是固定的,空格后面的ChangeSet1是别名,可以自定义

输入命令后会生成一个迁移文件,代码:

     public partial class ChangeSet1 : DbMigration
{
public override void Up()
{
AlterColumn("dbo.Product", "Name", c => c.String(nullable: false, maxLength: ));
} public override void Down()
{
AlterColumn("dbo.Product", "Name", c => c.String());
}
}

成功生成迁移文件后,运行 Update-Database 命令,EF就开始执行迁移操作,并把数据库更新到最新的迁移文件对应的版本。

这条命令有几个常用的参数,可以查看迁移在数据库中执行的详细操作(SQL等)

Update-Database -Verbose

这个参数可以指定目标迁移版本,对于需要退回到指定版本的情况很有用(回滚)

Update-Database -TargetMigration ChangeSet1

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,941
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,465
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,280
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,094
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,728
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,765