EF 迁移操作
- 一. 模型设计
- 1. 遵循EF标准,注意表关系配对
- 2. 数据模型里尽量把必须的属性和说明都写全
- 3. EF默认id字段为主键,如果没有,需指定主键
- 二. 数据迁移
- 1. 命令运行环境:visual studio工具栏->工具->NuGet 程序包管理器->程序包管理器控制台
- 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();
- }
EF 迁移操作的更多相关文章
- Redis Cluster高可用集群在线迁移操作记录【转】
之前介绍了redis cluster的结构及高可用集群部署过程,今天这里简单说下redis集群的迁移.由于之前的redis cluster集群环境部署的服务器性能有限,需要迁移到高配置的服务器上.考虑 ...
- EntityFramework之迁移操作(五)
使用Code First的话对于实体字段或者表映射修改都需要使用迁移操作,下面列出操作具体步骤 1.创建映射类和实体,本文主要是讲解迁移步骤,其他代码则没有列出 public class Produc ...
- Azure Cosmos DB (三) EF Core 操作CURD
一,引言 接着上一篇使用 EF Core 操作 Azure CosmosDB 生成种子数据,今天我们完成通过 EF Core 实现CRUD一系列功能.EF Core 3.0 提供了CosmosDB 数 ...
- EF如何操作内存中的数据以及加载相关联表的数据:延迟加载、贪婪加载、显示加载
之前的EF Code First系列讲了那么多如何配置实体和数据库表的关系,显然配置只是辅助,使用EF操作数据库才是每天开发中都需要用的,这个系列讲讲如何使用EF操作数据库.老版本的EF主要是通过Ob ...
- EF如何操作内存中的数据和加载外键数据:延迟加载、贪婪加载、显示加载
EF如何操作内存中的数据和加载外键数据:延迟加载.贪婪加载.显示加载 之前的EF Code First系列讲了那么多如何配置实体和数据库表的关系,显然配置只是辅助,使用EF操作数据库才是每天开发中都需 ...
- Asp.Net Core 2.0 项目实战(4)ADO.NET操作数据库封装、 EF Core操作及实例
Asp.Net Core 2.0 项目实战(1) NCMVC开源下载了 Asp.Net Core 2.0 项目实战(2)NCMVC一个基于Net Core2.0搭建的角色权限管理开发框架 Asp.Ne ...
- EF迁移命令
EF迁移设置的最后一步是在包管理器控制台中输入命令“add-migration InitialMigration -IgnoreChanges”.“InitialMigration”(高亮的黄色)是您 ...
- Flask学习笔记:数据库迁移操作flask-script+alembic/flask-migrate
数据库迁移是将代码中模型类(即表)的修改同步到数据库中, flask-sqlalchemy的模型类一旦使用create_all()映射到数据库中后,对这个模型类的修改(例如添加了一个新的字段)就不会再 ...
- redis键的迁移操作
1.redis单个实例内多库间的数据迁移操作 命令名称:move 语法:move key db 功能:将当前数据库的key移动到给定的数据库db当中.如果当前数据库(源数据库)和给定数据库(目标数据库 ...
随机推荐
- netty4与protocol buffer结合简易教程
各项目之间通常使用二进制进行通讯,占用带宽小.处理速度快~ 感谢netty作者Trustin Lee.让netty天生支持protocol buffer. 本实例使用netty4+protobuf-2 ...
- HDU 4352 XHXJ's LIS(数位dp&状态压缩)
题目链接:[kuangbin带你飞]专题十五 数位DP B - XHXJ's LIS 题意 给定区间.求出有多少个数满足最长上升子序列(将数看作字符串)的长度为k. 思路 一个数的上升子序列最大长度为 ...
- Nginx + FastCgi + Spawn-fcgi + C 架构的server环境搭建
1.Nginx 1.1.安装 Nginx 的中文维基 http://wiki.codemongers.com/NginxChs 下载 Nginx 0.6.26(开发版)(请下载最新版本号) tar z ...
- ubuntu14.04 的ibus不能卸载(安装fcitx输入法框架时可能有这个需求)。出现无system setting有用程序
每年的ubuntu新版本号公布,都会吸引一大批热血青年. 关注越多也让ubuntu越来越好了. 使用ubuntu的人都会在安装系统之后马上安装顺手的输入法,也可能不会.看人. 安装输入法,对于中文输入 ...
- IIS网站无法启动,提示 另一个程序正在使用此文件
s还用netstat -ano命令,观察哪一个进程正在使用80端口,任务管理中勾选PID,看看是哪个程序,关掉即可
- hdu 4777 Queue
题目大意: 一些人,每个人的身高都是不一样的 然后再给你一个k,表示这个人的左边或者右边,有k个人比他高 然后让你构造一个满足条件且字典序最小的序列 思路: 按照权值排序 这样每次加进去后只有后面的才 ...
- Flask中的ThreadLocal本地线程,上下文管理
先说一下和flask没有关系的: 我们都知道线程是由进程创建出来的,CPU实际执行的也是线程,那么线程其实是没有自己独有的内存空间的,所有的线程共享进程的资源和空间,共享就会有冲突,对于多线程对同一块 ...
- Tomcat组件
Tomcat组件 tomcat常用组件 Tomcat的组织结构 Tomcat是一个基于组件的服务器,它的构成组件都是可配置的,其中最外层的给件是CATALINA SERVLET容器,其他的组件按照一定 ...
- Linux 上安装 Node.js
Linux 上安装 Node.js 直接使用已编译好的包(在个人阿里云服务器47.100.6.106上安装) Node 官网已经把 linux 下载版本更改为已编译好的版本了,我们可以直接下载解压后使 ...
- bzoj 1630: [Usaco2007 Demo]Ant Counting【dp】
满脑子组合数学,根本没想到dp 设f[i][j]为前i只蚂蚁,选出j只的方案数,初始状态为f[0][0]=1 转移为 \[ f[i][j]=\sum_{k=0}^{a[i]}f[i-1][j-k] \ ...