EF Code-First数据迁移的尝试
Code-First的方式虽然省去了大量的sql代码,但增加了迁移的操作。尝试如下:
1、首先要在“扩展管理器”里搜索并安装NuGet“库程序包管理器”,否则所有命令都不能识别,会报CommandNotFound之类的错误。如果是离线状态,就下载NuGet.Tools.vsix并安装。这样,工具->库程序包管理器->管理解决方案的NuGet程序包里能自动找到已安装的EF组件。
2、为DAL项目安装EF,联机时可以直接在nuget里选择默认项目,输入install-package EntityFramework;脱机时需要手工下载EF的package,解压后在nuget里选择本地的源目录:install-package EntityFramework -IgnoreDependencies -Source c:\software\packages,这个DAL项目就已经添加了EF相应的引用,并且在项目的packages.config文件里添加了EF的信息
3、然后要为这个项目启动迁移。输入Enable-Migrations,会在项目里新建一个Migrations文件夹包含Configuration.cs和InitialCreate的还原点(这是针对sqlServer的,MySql的话需要Add-Migration自己手工生成)。如果已经存在Migration文件夹,可以删掉再重新enable-migrations,也会自动新建DB和表。必须确保DB和Model是完全匹配的,启动的时候EF会根据实体图生成Hash值,再与DB里__MigrationHistory的数据做对比,如果不匹配,就会报错。
4、现在DB已经建好了,随便改一下模型,比如给User加个Sex属性,接下去怎么做迁移呢?2种方式:1)开启自动更新AutomaticMigrationsEnabled=true;2)当然对于生产环境肯定不能这么干,用户数据是最重要的,这里Add-Migration test1。sqlserver里都OK,mysql里会报:
No MigrationSqlGenerator found for provider "MySql.Data.MySqlClient". Use SetSqlGenerator method in the target migrations configuration class to register additional SQL generators. 说的很清楚,在Configuration()里加止对应的sql generator就行:
this.SetSqlGenerator("MySql.Data.MySqlClient", new MySql.Data.Entity.MySqlMigrationSqlGenerator());
再次运行add-migration test1,生成迁移的代码。
5、执行update-database,model的变化反映到了DB中,__MigrationHistory里也添加了一条记录。如果是对外发布的话,要生成对应的sql脚本:update-database -script -sourceMigration:$InitialDatabase -TargetMigration:test3 -StartUpProjectName DAL.EF
6、EF上线时经常会报The model backing the context has changed since the database was created. Consider using Code First Migrations to update the database.
出现这个问题,首先要确认DB连接字符串正确,然后可以把测试版DB和正式版DB分别导出为sql,再用UltraCompare对比一下,保证所有的列和属性都是一致的。只要模型匹配,并且__MigrationHistory里的数据匹配,应该就能避免这个问题。
EF Code-First数据迁移的尝试的更多相关文章
- EF Code First 数据迁移配置
这里我想讲清楚code first 数据迁移的两种模式,还有开发环境和生产环境数据迁移的最佳实践. 1.1 数据迁移综述 EF Code first 虽然已经有了几种不同的数据库初始化策略,但是大部分 ...
- EF Code First 数据迁移操作
打开执行命令窗体 1.EF Code First创建数据库 PM> Install-Package EntityFramework 2.EF Code First数据库迁移 2.1.生成数据库 ...
- EF code First数据迁移学习笔记(转)
转自:http://www.cnblogs.com/icyJ/p/migration.html 准备工作 1.新建一个控制台项目, 在"程序包管理控制台"执行 Install-pa ...
- EF code First数据迁移学习笔记
准备工作 1.新建一个控制台项目, 在"程序包管理控制台"执行 Install-package EntityFramework //安装EF环境 2.在项目下新建类(Paper) ...
- MVC 使用EF Code First数据迁移之添加字段
PM> add-migration 20161109 -Force 正在为迁移“20161109”搭建基架.此迁移文件的设计器代码包含当前 Code First 模型的快照.在下一次搭建迁移 ...
- EF Code First 数据迁移命令
只需要开启程序管理控制台(Package Manager Console) 然后输入 Enable-Migrations -ContextTypeName youContextdb(你的数据库上下文 ...
- 图文详解 解决 MVC4 Code First 数据迁移
在使用Code first生成数据库后 当数据库发生更改时 运行程序就会出现数据已更改的问题 这时可以删除数据库重新生成解决 但是之前的数据就无法保留 为了保留之前的数据库数据 我们需要使用到C ...
- 解决 MVC4 Code First 数据迁移 数据库发生更改导致调试失败解决方法(二)
文章转载自:http://www.cnblogs.com/amoniyibeizi/p/4486617.html 前几天学MVC过程中,遇到更改Model类以后,运行程序就会出现数据已更改的问题导致调 ...
- Code First 数据迁移 转
一.为模型更改设置 Code First 数据迁移 1.工具—>库程序包管理器—>程序包管理器控制台—>输入“Enable-Migrations” 或者 Enable-Migrat ...
- EF架构~CodeFirst数据迁移与防数据库删除
回到目录 本文介绍两个概念,防数据库自动删除,这是由于在code first模式下,当数据实体发生变化时,会对原来数据库进行删除,并将新数据表添加进来,但这对于我们的运营环境数据库,是万万不能接受的, ...
随机推荐
- ElasticSearch(ES)和solr的关系和区别
可以参考这篇文章:http://www.cnblogs.com/chowmin/articles/4629220.html Solr 2004年诞生(当时是Solar). ElasticSearch ...
- WPA/WPA2四次握手
WPA/WPA2四次握手 官方文档:https://en.wikipedia.org/wiki/IEEE_802.11i-2004 The four-way handshake is designed ...
- datagrid实现行的上移和下移
<html> <head> <meta http-equiv="Content-Type" content="text/html; char ...
- contains
ArrayLIst类使用contains方法时要注意:放入ArrayList中的类必须要重写equals方法(既然equals重写了,那么 hash方法也应该重写,这两个方法一般同时重写):如果不重写 ...
- PC上安装多个操作系统
目 录 第1章 绪论 1 1.1 目标 1 1.2 适宜的读者 1 第2章 制作启动U盘 2 2.1 初级安装 2 2.2 启动分析 3 2.3 高级安装 1 ...
- Android 开源简单控件
Android开源系列分类 查看 CircleImageView 自定义圆形控件的使用 添加依赖 ‘de.hdodenhof:circleimageview:2.1.0' 作用:无论你设置的图片是什么 ...
- robotframework笔记23
远程库接口 远程库接口提供了对在测试库 比机器人框架本身是在不同的机器上运行, 同时实现图书馆使用其他语言比 本机支持Python和Java. 为一个测试库用户远程 library看起来几乎一样的其他 ...
- lambda表達式
lambda简介 lambda运算符:所有的lambda表达式都是用新的lambda运算符 " => ",可以叫他,“转到”或者 “成为”.运算符将表达式分为两部分,左边指定 ...
- C/C++ 如何劫持别人家的命令||函数||程序(只能对于window而言)
要实现下面程序,首先我们需要三个文件 detours.h ,detours.lib ,detver.h(可以去网上下载) 1. 首先让我们看看,一个最简单的C程序,如何劫持system函数. #inc ...
- Uva-------(11462) Age Sort(计数排序)
B Age Sort Input: Standard Input Output: Standard Output You are given the ages (in years) of all ...