首页 > 数据库技术 > 详细

ASP.NET MVC4 新手入门教程特别篇之一----Code First Migrations更新数据库结构(数据迁移)修改Entity FrameWork 数据结构(不删除数据)

时间:2015-01-22 19:53:53      阅读:1433      评论:0      收藏:0      [点我收藏+]

背景

code first起初当修改model后,要持久化至数据库中时,总要把原数据库给删除掉再创建(DropCreateDatabaseIfModelChanges),此时就会产生一个问题,当我们的旧数据库中包含一些测试数据时,当持久化更新后,原数据将全部丢失,故我们可以引入EF的数据迁移功能来完成。

 

要求

 

  1. 已安装NuGet

 

过程示例

原model
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Entity;

namespace MvcApplication1.Models
{
    public class Movie
    {
        public int ID { get; set; }
        public string Title { get; set; }
        public DateTime ReleaseDate { get; set; }
        public string Genre { get; set; }
        public decimal Price { get; set; }

        public string Rating { get; set; }
    }
    public class MovieDBContext : DbContext
    {
        public DbSet<Movie> Movies { get; set; }
    }
}

 

//新model  
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Entity;

namespace MvcApplication1.Models
{
    public class Movie
    {
        public int ID { get; set; }
        public string Title { get; set; }
        public DateTime ReleaseDate { get; set; }
        public string Genre { get; set; }
        public decimal Price { get; set; }
        public decimal VipPrice { get; set; }

        public string Rating { get; set; }
    }
    public class MovieDBContext : DbContext
    {
        public DbSet<Movie> Movies { get; set; }
    }
}

 

注:区别在于,我们给Movie新加了一个VipPrice属性。

 

接下来,我们将开始持久化此model至数据库中(我们现在只是对属性作修改,此时数据库中此字段的长度为nvarchar(max),并不是nvarchar(10))

 

1:在config中配置数据库连接:

 

  <connectionStrings>
    <add name="MovieDBContext" connectionString="Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\Movies.mdf;Integrated Security=True" providerName="System.Data.SqlClient" />
   </connectionStrings>

 

 

 

2:打开NuGet控制台:

 

技术分享

 

 

3:运行命令Enable-Migrations

可能会出现如下错误:

PM> Enable-Migrations
More than one context type was found in the assembly MvcApplication1.
To enable migrations for MvcApplication1.Models.UsersContext, use Enable-Migrations -ContextTypeName MvcApplication1.Models.UsersContext.
To enable migrations for MvcApplication1.Models.MovieDBContext, use Enable-Migrations -ContextTypeName MvcApplication1.Models.MovieDBContext.
To enable migrations for MvcApplication1.PurchaseRequestEntities, use Enable-Migrations -ContextTypeName MvcApplication1.PurchaseRequestEntities.

这是因为我之前 执行过 Enable-Migrations ,系统提示我已经存在MvcApplication1 context 

此时项目会出现如下文件夹:

 

技术分享

打开configuation.cs,将作出如下修改:

 

   public Configuration()
        {
            AutomaticMigrationsEnabled = true;
        }

 

4:再次执行Update-Database

 

如下:

PM> Update-Database
指定“-Verbose”标记以查看应用于目标数据库的 SQL 语句。
无任何待定的基于代码的迁移。
正在应用自动迁移: 201501220847062_AutomaticMigration。
正在运行 Seed 方法。

 

如果确保没事,只需给此命令加个强制执行的参数即可:

Enable-Migrations -Force

最后再次执行:Update-Database

技术分享

数据库中已经增加VipPrice字段

数据库中的原数据也没有丢失!

ASP.NET MVC4 新手入门教程特别篇之一----Code First Migrations更新数据库结构(数据迁移)修改Entity FrameWork 数据结构(不删除数据)

原文:http://www.cnblogs.com/178mz/p/4242230.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!