Code-First 在SQLServer Compact 4.0 中的应用(二),使用Migrations更改数据库架构并保留历史数据

本文介绍了如何在SQLServer Compact 4.0中使用Code-First和Migrations进行数据库架构更改,同时保留历史数据。通过启用Migrations,添加迁移和更新数据库,详细阐述了数据库修改的过程,并展示了如何在Visual Studio 2012中操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文接续自《Code-First 在SQLServer Compact 4.0 中的应用(一),基础配置》,解决数据库架构需要变更时遇到的问题。

回顾例子中的代码(改用MVC描述):

?
public class LiangyichenDBContext : DbContext
{
     public DbSet<LiangyichenDB> Items { get ; set ; }
}
 
public class LiangyichenDB
{
     [Key]
     public int index { get ; set ; }
 
     public string title { get ; set ; }
 
     public DateTime pubdate { get ; set ; }
 
}

 

?
public ActionResult Index()
{
     var context = new LiangyichenDBContext();
 
     context.Items.Add( new LiangyichenDB { title = "1" , pubdate = DateTime.Now });
     context.Items.Add( new LiangyichenDB { title = "2" , pubdate = DateTime.Now });
     context.Items.Add( new LiangyichenDB { title = "3" , pubdate = DateTime.Now });
     context.SaveChanges();
 
     return View(context.Items);
}

 

?
@model IQueryable< codefirst_Migrations.Models.LiangyichenDB >
@{
     Layout = null;
}<!DOCTYPE html>
< html >
< head >
     < meta name = "viewport" content = "width=device-width" />
     < title >Index</ title >
</ head >
< body >
     < div >
         @foreach (var i in Model)
         {
             < p >@i.title :@i.pubdate</ p >
         }
     </ div >
</ body >
</ html >

上例在 Visual Studio 2012 中调试通过。

首先我们一定要运行一次,确保生成了原始数据库(/app_data/Database.sdf)

下面我们开始更改数据库架构

?
public class LiangyichenDB
{
     [Key]
     public int index { get ; set ; }
 
     public string title { get ; set ; }
 
     public DateTime pubdate { get ; set ; }
 
     //增加一个字段
     public string notes { get ; set ; }
 
}

再运行:

 现在开始解决问题啦:

在”工具“--”库程序包管理器“--”程序包管理器控制台“中, 依次键入并回车:

1:Enable-Migrations

2:Add-Migration UpdataDatabasesWithAddNotes

3:Update-Database

步骤1,开启架构更新;步骤2,添加一个更新;步骤3,把新的架构刷新回数据库,进行实际修改。其中步骤2中的”UpdataDatabasesWithAddNotes“是我们自己定义的名称,能够表达意思即可。

这时候我们再刷新看看数据库的实际架构:

查看一下数据:

我们对Controller和View中的代码作一下修改,验证在程序中的执行结果:

?
public ActionResult Index()
{
     var context = new LiangyichenDBContext();
 
     context.Items.Add( new LiangyichenDB { title = "4" , pubdate = DateTime.Now, notes = "新字段值-1" });
     context.Items.Add( new LiangyichenDB { title = "5" , pubdate = DateTime.Now, notes = "新字段值-2" });
     context.Items.Add( new LiangyichenDB { title = "6" , pubdate = DateTime.Now, notes = "新字段值-3" });
     context.SaveChanges();
 
     return View(context.Items);
}

 

?
< div >
     @foreach (var i in Model)
     {
         < p >@i.title :@i.pubdate : @i.notes</ p >
     }
</ div >

 

至此,对于数据库架构的修改,基本操作已经完成。 下面我们来回顾它的过程:

当我们第一次键入Enable-Migrations的时候,系统自动为项目中生成了文件夹Migrations:

 Migrations文件夹中的代码集记录了每次更新的逻辑。通常我们没有必要去对它们作修改。为了观察一下文件夹的变化,我们再修改一次数据库架构:

?
public class LiangyichenDB
{
     [Key]
     public int index { get ; set ; }
 
     public string title { get ; set ; }
 
     public DateTime pubdate { get ; set ; }
 
     public string notes { get ; set ; }
 
     //第二次修改架构,再增加一个字段
     public string authro { get ; set ; }
}

然后:PM> Add-Migration UpdataDatabasesWithAddAuthor

看到了吧,每次架构的更新,都会有一个新的代码逻辑文件产生。

PM> Update-Database :

至此,对于在Codefirst中数据库架构更新并保留历史数据的基本操作,告一段落。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值