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的无参数构造函数必须指定连接串:(数据上下文的类名就是连接串的名称)

<add name="TestDbContext " connectionString="Data Source=(loacl); Database=Northwind; User ID=sa; Password=123456;" providerName="System.Data.SqlClient"/>

public class TestDbContext : DbContext
{

public TestDbContext()
{
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后会生成一个迁移文件夹,里面会记录版本更迭状况

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]表会有相应的记录。

 

转载于:https://www.cnblogs.com/cooolyuxyz/p/10629531.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值