EntityFramework Code First便捷工具——数据迁移

使用EntityFramework Code First开发,数据迁移是一个不得不提的技术。

在我们的开发过程中,难免需要对模型进行改进,模型改进后,会导致实体集与数据库不一致,当然我们可以通过删除数据库然后再重构数据库,但是在生产环境中这样做,这样或多或少会出现一些问题。使用“数据迁移”,可以帮助我们解决这个问题。

数据迁移,添加的是我们对数据库的改动,这一点可以从下面Demo中可以看出来。每对数据库进行一次改动(如删除了某个表,更改了某一列),添加一次数据迁移,然后更新数据库,这样就能够达到我们的目的。

先说一下我用的工具:

Vs2015 pro

Sql Serer 2014 developer

现在微软的开发工具开发者版都免费了,个人用户的话用起来还是会比较舒服的。

接下来放上一个小的Demo

新建一个空白解决方案(文件-新建-项目-其他项目类型-空白解决方案)Demo

然后添加两个类库,分别命名为Demo.Model和Demo.DAL。

添加一个Web应用程序(MVC),命名为Demo.UI

分别为Demo.Model、Demo.UI、Demo.DAL安装EntitFramework。

程序包管理控制台输入

Install-Package EntityFramwork

在Demo.Model中添加一个User类

namespace Demo.Model
{
    public class User
    {
        public int UserId { get; set; }

        public string UseraName { get; set; }

        public string Password{ get; set; }
    }
}

在Demo.DAL中添加一个DemoDbContext类,该类继承自DbContext类,作用主要是对数据库结构的映射(个人理解)。

using Demo.Model;
using System.Data.Entity;

namespace Demo.DAL
{
    public class DemoDbContext:DbContext
    {
        public DemoDbContext() : base("Name=DefaultConnection")
        {

        }
        //添加User表
        public IDbSet<User> Users { get; set; }
    }
}

开启数据迁移

在程序包管理控制台输入(不区分大小写):

Enable-Migrations

执行完可以发现,这里新建了一个名为 Migration 的文件夹和一个配置文件

然后进行下一步操作,设置 Demo.UI 为启动项目

然后修改Web.config中的ConnectionString属性

<connectionStrings>
<add name="DefaultConnection" connectionString="Data Source=.;User Id=sa;Password=123; Database=DemoDbContext" providerName="System.Data.SqlClient" />
</connectionStrings>

这里定义的是连接字符串,不同的 Sql 版本对应的连接字符串可能会不一致,Sql Server Express 版本默认的实例名为 SQLEXPRESS 所以连接字符串应为

<connectionStrings>
<add name="DefaultConnection" connectionString="Data Source=./sqlexpress;User Id=sa;Password=123; Database=DemoDbContext" providerName="System.Data.SqlClient" />
</connectionStrings>

这里注意一下 Database 属性,这里定义的为数据库的名称,这里要与前面定义的 DemoDbContext 保持一致。

配置好以后,在程序包管理控制台窗口输入

Add-Migration Add_User_Entity

这样我们就添加了一次数据迁移,数据迁移的名称为 Add_User_Entity

执行完之后会发现,Migration 文件夹添加了一个配置文件 201709250342176_Add_User_Entity.cs 前面是时间,后面是我们数据迁移的名字。

添加测试数据

Demo.DALMigration 文件夹中添加一个名为 Seed 的文件夹

添加一个 UserSeed

using Demo.Model;

namespace Demo.DAL.Migrations.Seed
{
    public class UserSeed
    {
        public readonly DemoDbContext _dbcontext;

        public UserSeed(DemoDbContext context)
        {
            _dbcontext = context;
        }

        public void Create()
        {
            AddSeed();
        }

        public void AddSeed()
        {
            User User = new User
            {
                Password = "123",
                UseraName = "Niko"
            };
            _dbcontext.Users.Add(User);
            _dbcontext.SaveChanges();
        }

     }
}

Migration 文件夹 Configuration.cs 中添加

    protected override void Seed(Demo.DAL.DemoDbContext context)
    {
        //添加种子数据
        new UserSeed(context).Create();

    }

添加完以后,执行最后一步 —— 更新数据库

在程序包管理控制台输入

Update-Database

或者

Update-Database -Verbose

后者会在控制台输出对数据库的操作过程,这样我们在数据库中就建立了一个名为 DemoDbContext 的数据库,并在里面添加了一个 Users 表,并添加了我们想要的测试数据:

以后每对数据库进行一次改动,就添加一次数据迁移,然后更新数据库,即可实现我们的目的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 137,134评论 19 139
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 47,350评论 6 342
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 180,261评论 25 708
  • 1 前言 文件结构:对于使用CoreData作为数据本地化的APP,在工程中CoreData会管理一个.xcdat...
    RichardJieChen阅读 1,350评论 0 5
  • 上个世纪七十年代华北平原上的一个小县城内,正是春节,鞭炮声此起彼伏,天刚放亮,北方传统的普通四合院内正房里六十岁左...
    永祥勇翔阅读 166评论 0 0

友情链接更多精彩内容