EF Code First 数据迁移

背景:

EF Code First在经历新业务或者业务逻辑变更时,可能会遇到数据库的更改,比如新增表

,更改表加字段,等等。这个时候,删除原来的数据库重建会丢失数据。

方案1:

如果初次开发,可以选择删除重建。

代码:

public TestDbContext()
: base("Name=TestConnection")
{
Database.SetInitializer<TestDbContext>(new DropCreateDatabaseIfModelChanges<TestDbContext>());
}

方案2:

使用EF代码迁移工具。

1,通过NugGet向项目添加EF,同时系统会添加一个迁移工具

2,Web.config或App.Config配置很重要,迁移工具会根据<entityFramework>节点寻找需要更新的数据库,如果是<defaultConnectionFactorytype="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">会寻找本地数据库,如果是<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" >会寻找远程数据库。当然这里还可以有其他配置,比如Oracle的配置。

3,自定义的DbContext的无参数构造函数必须指定连接串:

public class TestDbContext : DbContext
{

public TestDbContext()
: base("Name=TestConnection")
{
Database.SetInitializer<TestDbContext>(new DropCreateDatabaseIfModelChanges<TestDbContext>());
//Database.SetInitializer<TestDbContext>(null);
}

迁移工具会根据这个构造函数寻找数据库连接,默认的连接串为VS的MSLoaclDb数据库实例,这个地方需要注意。

4,准备好之后就可以开始迁移了,打开程序包管理器控制台。分三步输入指令:(示例如下)

PM> Enable-migrations
正在检查上下文的目标是否为现有数据库...
已为项目 MvcTestKO 启用 Code First 迁移。
PM> Add-Migration v1
正在为迁移“v1”搭建基架。
此迁移文件的设计器代码包含当前 Code First 模型的快照。在下一次搭建迁移基架时,将使用此快照计算对模型的更改。如果对要包含在此迁移中的模型进行其他更改,则您可通过再次运行“Add-Migration v1”重新搭建基架。
PM> Update-Database
指定“-Verbose”标志以查看应用于目标数据库的 SQL 语句。
正在应用显式迁移: [201903300817195_v1]。
正在应用显式迁移: 201903300817195_v1。

说明:

Enable-migrations后会生成一个迁移文件夹,里面会记录版本更迭状况

EF Code First 数据迁移

public partial class v1 : DbMigration
    {
        public override void Up()
        {
            CreateTable(
                "dbo.TestChilds",
                c => new
                    {
                        Id = c.String(nullable: false, maxLength: 128),
                        createTime = c.DateTime(nullable: false),
                    })
                .PrimaryKey(t => t.Id);
            
        }
        
        public override void Down()
        {
            DropTable("dbo.TestChilds");
        }
    }
    public partial class v2 : DbMigration
    {
        public override void Up()
        {
            AddColumn("dbo.TestChilds", "Name", c => c.String());
        }
        
        public override void Down()
        {
            DropColumn("dbo.TestChilds", "Name");
        }
    }

Add-Migration v1 添加一个命名为v1的版本,添加好后会生成一个名叫 201903300817195_v1.cs的类。

PM> Update-Database 将迁移更新到数据库。更新完后,查看数据库会有更新 ,并且数据库的[__MigrationHistory]表会有相应的记录。

EF Code First 数据迁移

 

上一篇:删除SQL数据库中的用户对象


下一篇:Rename failed for user 'dbo' -MS SQL ERROR 15150