标签:
上一篇文章中介绍了一个简单的可以运行起来的例子,旨在为了让大家快速熟悉EF的一个大概。然而我们的模型不可能一次就建立好,可以会涉及到多次的修改,而如何修改并使之应用到数据数据库,便是本篇着重想要介绍的。
public class Blog { public int BlogId { get; set; } public string Name { get; set; } public string Url { get; set; } public string Title { get; set; } //添加一个属性Title public virtual List<Post> Posts { get; set; } }
首先,需要在Nuget中输入以下命令允许数据库迁移操作。
PM> enable-migrations
然后数据库中就会自动生成一个名为Migrations的文件夹,里面包含两个文件,分别是Configuration.cs及<timestamp>_InitialCreate.cs的文件。
为了将刚添加的一列应用于数据库,需要输入以下命令。
PM> add-migration AddTitle
这时项目就会生成一个名为AddTitle的类,用来对Blogs表中添加Title属性。(生成不准确时需要人为修改,当然在这里是不需要的)
public partial class AddTitle : DbMigration { public override void Up() { AddColumn("dbo.Blogs", "Title", c => c.String(unicode: false)); } public override void Down() { DropColumn("dbo.Blogs", "Title"); } }
然后输入以下命令将模型更改应用于现有的数据库,可以通过命令后加-Verbose来查看具体执行的sql语句。
PM> update-database -Verbose
alter table `Blogs` add column `Title` longtext INSERT INTO `__MigrationHistory`( `MigrationId`, `ContextKey`, `Model`, `ProductVersion`) VALUES ( ‘201505280245036_AddTitle‘, ‘CodeFirstSample.BloggingContext‘,
这时可以查看数据库表信息,已经有了名为Title的列。
如将Post中的Title属性更改为TitleP。
public class Post { public int PostId { get; set; } public string TitleP { get; set; } //从Title更改到TitleP public int BlogId { get; set; } public virtual Blog Blog { get; set; } }
输入相关命令
PM> add-migration ChangeTitle
将会生成相应的类ChangeTitle,如下所示。
public partial class ChangeTitle : DbMigration { public override void Up() { AddColumn("dbo.Posts", "TitleP", c => c.String(unicode: false)); DropColumn("dbo.Posts", "Title"); } public override void Down() { AddColumn("dbo.Posts", "Title", c => c.String(unicode: false)); DropColumn("dbo.Posts", "TitleP"); } }
使用Update-Database命令将更忙应用于数据库,再查看数据库中表的信息,已经更改为名为TitleP。
如需要删除刚在Bolg中添加Title属性,首先修改Model如下:
public class Blog { public int BlogId { get; set; } public string Name { get; set; } public string Url { get; set; } //public string Title { get; set; } //删除 public virtual List<Post> Posts { get; set; } }
然后输入相关命令
PM> add-migration DeleteTitle
项目就会生成相应的数据库迁移类DeleteTitle
public partial class DeleteTitle : DbMigration { public override void Up() { DropColumn("dbo.Blogs", "Title"); } public override void Down() { AddColumn("dbo.Blogs", "Title", c => c.String(unicode: false)); } }
输入数据库更新命令将会将模型变化应用于当前数据库。
如添加模型User并修改BloggingContext。
public class User {
[Key] public string Name { get; set; } public string DisplayName { get; set; } } [DbConfigurationType(typeof(MySqlEFConfiguration))] public class BloggingContext : DbContext { public DbSet<Blog> Blogs { get; set; } public DbSet<Post> Posts { get; set; } public DbSet<User> Users { get; set; } }
输入命令并更新数据库便在数据库中添加了名为Users的表。
PM> add-migration AddUser
模型的更新及删除同更新删除模型中单独的一个属性。
命令 |
功能 |
实例 |
|
Add-Migration |
AddName |
添加名为Name的列或Model |
Add-Migration AddUrl |
DeleteName |
删除名为Name的列或Model |
Add-Migration DeleteUser |
|
UpdateName/ChangeName |
更新名为Name的列或Model |
Add-Migration UpdateUrl |
|
Update-Database |
将模型变化应用于数据库 |
- |
|
Get-Migrations |
获取已经应用的迁移 |
|
标签:
原文地址:http://www.cnblogs.com/maigc249/p/4535678.html