Code First 迁移
这篇文章是建立在已使用CodeFirst创建新数据库的基础之上。
CodeFirst创建新数据库的代码如下:
class Program { static void Main(string[] args) { using (SchoolContext context = new SchoolContext()) { Class entity = new Class { Id = 1, Name = "重庆工商大学", Number = "CTBU" }; context.Classs.Add(entity); context.SaveChanges(); var query = from n in context.Classs select n; foreach (var item in query) { Console.WriteLine(item.Name); } Console.ReadLine(); } } } public class Student { [Key] public int Id { get; set; } public string Name { get; set; } public string Number { get; set; } public int ClassId { get; set; } public virtual Class Class { get; set; } } public class Class { [Key] public int Id { get; set; } public string Number { get; set; } public string Name { get; set; } public virtual List<Student> Students { get; set; } } public class SchoolContext : DbContext { /// <summary> /// App.config文件中要添加name为DbConnect的数据库连接字符串 /// </summary> public SchoolContext() : base("name=DbConnect") { } public DbSet<Student> Students { get; set; } public DbSet<Class> Classs { get; set; } } }
上面代码虽然能够成功执行,并基本达到预期效果。但是不知道为何,数据库表名以's'结尾!?
现在开始学习CodeFirst迁移:
当我们进行更改模型时,还需要更新数据库架构。为此,我们使用一个称为“Code First 迁移”(或简称“迁移”)的功能。
“迁移”是一组有序的步骤,描述如何升级(和降级)数据库架构。这些步骤(称为“迁移”)中的每个步骤均包含一些代码,用于描述要应用的更改。
第一步是为 SchoolContext 启用 Code First 迁移。
- “工具”->“库程序包管理器”->“程序包管理器控制台”
- 在程序包管理器控制台中运行 Enable-Migrations 命令 一个新的 Migrations 文件夹已添加至项目中,它包含两个文件:
- Configuration.cs — 此文件包含“迁移”将用来迁移 SchoolContext 的设置。在本演练中不需要进行任何更改,但是,在此处可以指定种子数据、为其他数据库注册提供程序、更改生成迁移的命名空间等。
- <时间戳>_InitialCreate.cs — 这是第一个迁移,它表示已经应用于数据库的更改。应用更改的目的是将其从空数据库迁移至包含博客和文章表的数据库。尽管我们让 Code First 自动创建这些表,现在我们选择“迁移”(已转化为一次“迁移”)。Code First 还在本地数据库中记录:该“迁移”已经应用。文件名中的时间戳用于排序。
public class Student { [Key] public int Id { get; set; } public string Name { get; set; } public string Number { get; set; } public int ClassId { get; set; } /// <summary> /// 家庭住址 /// </summary> public string Address { get; set; } public virtual Class Class { get; set; } }