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.DAL 中 Migration 文件夹中添加一个名为 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 表,并添加了我们想要的测试数据:
以后每对数据库进行一次改动,就添加一次数据迁移,然后更新数据库,即可实现我们的目的。
下一篇: 拉格朗日插值
推荐阅读
-
Code First Migrations更新数据库结构(数据迁移)
-
DDD Code First 迁移数据实现EF CORE的软删除,值对象迁移配置
-
Code First Migrations更新数据库结构(数据迁移)
-
EntityFramework Code First便捷工具——数据迁移
-
20.1翻译系列:EF 6中自动数据迁移技术【EF 6 Code-First系列】
-
EF Code First Migrations数据库迁移
-
Code First Migrations更新数据库结构(数据迁移)
-
DDD Code First 迁移数据实现EF CORE的软删除,值对象迁移配置
-
Code First Migrations更新数据库结构(数据迁移)
-
EntityFramework Code First便捷工具——数据迁移