使用Entity Framework的Code First模式在进行数据迁移的时候会遇到一些问题,熟记一些常用的命令很重要,下面整理出了数据迁移时常用的一些命令。

一、模型设计
EF默认使用id字段作为主键,如果没有,则需要指定主键。

二、数据迁移基本命令和常用参数

1、安装Entity Framework

a、使用命令安装:visual studio工具栏->工具->NuGet 程序包管理器->程序包管理器控制台

输入命令:Install-Package EntityFramework。

2、基本命令和常用参数

> get-help 获取帮助的命令(例:get-help Enable-Migrations –detailed)
   –detailed 详细用法
> Enable-Migrations 启用迁移
   -Force 强制覆盖
   -ProjectName 目标项目(迁移类所在的项目)
   -StartUpProjectName 启动项目(包含数据库连接字符串配置文件所在的项目)
   -ContextTypeName 需要迁移的数据库(类)
   -ConnectionStringName 指定使用配置文件中连接字符串的名称
   -ConnectionString 指定使用的连接字符串
   -ConnectionProviderName 指定连接字符串的provider名称
   -MigrationsDirectory 指定迁移文件的目录(多个数据库,独立自动迁移用)
> Add-Migration 为挂起的Model变化添加迁移脚本
   -Force
   -ProjectName
   -StartUpProjectName
   -ConfigurationTypeName 指定使用的迁移配置
   -IgnoreChanges 忽略检测到挂起的model改变,为已有的数据库启用迁移创建一个初始的,空的迁移。
   -ConnectionStringName
   -ConnectionString
   -ConnectionProviderName
> Update-Database 将挂起的迁移更新到数据库
   -Force
   -ProjectName
   -StartProjectName
   -ConfigurationTypeName
   -ConnectionStringName
   -ConnectionString
   -ConnectionProviderName
   -SourceMigration 只有-Script打开时才有效。指定迁移的名称用作更新的起点。忽略则使用最后一次应用的迁移。
   -TargetMigration 指定将数据库更新到哪个迁移的名称。
   -Script 生成SQL脚本
> Get-Migrations 获取已经应用的迁移
3. 迁移操作步骤举例:
    DataBase :解决方案中,数据模型层项目名称
    Member :解决方案中,启动项的名称
   DataBase.Member.MemberEntities :需要应用数据迁移的数据上下文
a. 第一次启用迁移,输入命令:
Enable-Migrations -ProjectName DataBase -StartUpProjectName Member -ContextTypeName DataBase.Member.MemberEntities
并敲回车键,然后打开生成的Migrations文件夹中的Configuration.cs文件,
把构造方法中的AutomaticMigrationsEnabled = false;改为AutomaticMigrationsEnabled = true;
如果有多个数据库,每个库需要独立指定迁移文件,命令格式如下:
Enable-Migrations -ProjectName DataBase -StartUpProjectName Member -ContextTypeName DataBase.Member.MemberEntities -MigrationsDirectory:MemberMigrations
b. 模型有改动时,输入命令:add-migration update20150508 -ProjectName DataBase -StartUpProjectName Member -Force并敲回车键,创建迁移脚本
然后 输入命令:Update-Database -Verbose -ProjectName DataBase -StartUpProjectName Member并敲回车键,执行迁移操作
4. 配置自动迁移
在应用程序的入口方法(函数)里注册自动迁移:
Database.SetInitializer(new MigrateDatabaseToLatestVersion<DataBase.Member.MemberEntities, DataBase.MemberMigrations.Configuration>());
注意:Configuration.cs生成的是internal sealed class,如果不在启动程序集中,则需要修改成public
5. 脱离visual studio环境做数据库版本迁移,可用migrate.exe,可参考:http://msdn.microsoft.com/zh-cn/data/jj618307

三. 注意事项:
1. 连接字符串不用DBFirst自动生成的那么复杂,采用如下格式即可:
<add name="MemberEntities" connectionString="server=.;database=Member;integrated security=true;" providerName="System.Data.SqlClient"/>
2. 有挂起的Model改变时,会导致操作不正常,注意操作步骤,必要时清理挂起的迁移。
3. 修正后数据库,里面的数据如果需要调整,用Configuration.cs文件里的Seed方法,示例如下:
protected override void Seed(DataBase.Member.MemberEntities context)
{
var users = new List<User>
{
new User { Account = "test", Password = "123" },
new User { Account = "admin", Password = "456" }
};
users.ForEach(s => context.Users.AddOrUpdate(p => p.Account, s));
context.SaveChanges();
}

Entity Framework应用:Code First模式数据迁移的基本用法的更多相关文章

  1. Entity Framework 之Code First自动数据迁移

    using MvcShopping.Migrations; using MvcShopping.Models; using System; using System.Collections.Gener ...

  2. Entity Framework(六):数据迁移

    在前面的几篇文章中,简单的介绍了如何使用Entity Framework的Code First模式创建数据库,但是,在前面的几篇文章中,我们都是通过使用数据库初始化策略来做,也就是每次先删除数据库然后 ...

  3. Entity Framework 学习系列(3) - MySql Code First 开发方式+数据迁移

    目录 # 写在前面 一.开发环境 二.创建项目 三.安装程序包 四.创建模型 五.连接字符串 六.编辑程序 七.数据迁移 写在最后 # 写在前面 这几天,一直都在学习Entity Framework ...

  4. AppBox升级进行时 - 拥抱Entity Framework的Code First开发模式

    AppBox 是基于 FineUI 的通用权限管理框架,包括用户管理.职称管理.部门管理.角色管理.角色权限管理等模块. 从Subsonic到Entity Framework Subsonic最早发布 ...

  5. EF 中 Code First 的数据迁移以及创建视图

    写在前面: EF 中 Code First 的数据迁移网上有很多资料,我这份并没什么特别.Code First 创建视图网上也有很多资料,但好像很麻烦,而且亲测好像是无效的方法(可能是我太笨,没搞成功 ...

  6. 【极力分享】[C#/.NET]Entity Framework(EF) Code First 多对多关系的实体增,删,改,查操作全程详细示例【转载自https://segmentfault.com/a/1190000004152660】

      [C#/.NET]Entity Framework(EF) Code First 多对多关系的实体增,删,改,查操作全程详细示例 本文我们来学习一下在Entity Framework中使用Cont ...

  7. Entity Framework 6 Code First新特性:支持存储过程

    Entity Framework 6提供支持存储过程的新特性,本文具体演示Entity Framework 6 Code First的存储过程操作. Code First的插入/修改/删除存储过程 默 ...

  8. 创建ASP.NET Core MVC应用程序(3)-基于Entity Framework Core(Code First)创建MySQL数据库表

    创建ASP.NET Core MVC应用程序(3)-基于Entity Framework Core(Code First)创建MySQL数据库表 创建数据模型类(POCO类) 在Models文件夹下添 ...

  9. Entity Framework 之 Code First

    使用NuGet助您玩转代码生成数据————Entity Framework 之 Code First [前言] 如果是Code First老鸟或者对Entity Framework不感兴趣,就不用浪费 ...

随机推荐

  1. 解决 无法将文件" "复制到“bin\*.*”。对路径“bin\*.*”的访问被拒绝。

    关于这个问题今天碰到了, 我的解决办法很简单: 删除bin目录下的所有文件,然后重新生成,就不报错了.

  2. RabbitMQ概念及环境搭建(四)RabbitMQ High Availability

    #################################################### RabbitMQ High Availability #################### ...

  3. jquery ajax调用WCF,采用System.ServiceModel.WSHttpBinding协议

    采用System.ServiceModel.WSHttpBinding或者basicHttpBinding 协议.客户端就不能直接在前端通过url直接访问服务了 它是基于SOAP协议的bing,会采用 ...

  4. Form_Form Builder中的全局变量和程式变量(概念)

    2014-12-20 Created By BaoXinjian

  5. 阅读《Android 从入门到精通》(17)——进度条

    进度条(ProgressBar) java.lang.Object; android.view.View; android.widget.ProgressBar; ProgressBar 类方法 Pr ...

  6. java使用ssh访问Linux的项目jscraft

    一.gradle地址 // https://mvnrepository.com/artifact/com.jcraft/jsch compile group: 'com.jcraft', name: ...

  7. 浅谈Javascript中的void操作符

    由于JS表达式偏啰嗦,于是最近便开始采用Coffeescript来减轻负担.举个栗子,当我想取屋子里的第一条dog时,首先要判断house对象是否存在,然后再判断house.dogs是否存在,最后取h ...

  8. MySql按字段分组取最大值记录

    数据库原始数据如下:数据库名:tbl_clothers 需求是:按照type分组,并获取个分组中price中的最大值,解决sql如下: 方法一: select * from (select type, ...

  9. Qt中使用DOM解析XML文件或者字符串二(实例)

    介绍 在Qt中提供了QtXml模块实现了对XML数据的处理,我们在Qt帮助中输入关键字QtXml Module,可以看到该模块的类表.在这里我们可以看到所有相关的类,它们主要是服务于两种操作XML文档 ...

  10. git使用(二)----创建版本库

    创建版本库(操作都是在linux环境下) 什么是版本库呢?版本库又名仓库,英文名repository,其实就是一个目录,可以进行增删查改 创建一个目录,这里在根目录下创建一个git_home目录mkd ...