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模式下,当数据实体发生变化时,会对原来数据库进行删除,并将新数据表添加进来,但这对于我们的运营环境数据库,是万万不能接受的, ...
随机推荐
- maven初试2
1.1.建立Hello项目 1.首先建立Hello项目,同时建立Maven约定的目录结构和pom.xml文件 Hello | --src | -----main | ----------java | ...
- number-of-segments-in-a-string
https://leetcode.com/problems/number-of-segments-in-a-string/ package com.company; class Solution { ...
- 关于Socket的经验小结
前言 IM通信在互联网发展到现在已经是码农的世界里人尽皆知的技术,特别在当下移动互联网迅猛发展的时代这种技术的开发也更加火热,其中老牌的代表作就有QQ和MSN,和最近新崛起的微信,默默,易信,来往等眼 ...
- golang时间
//获取本地location toBeCharge := "2015-01-01 00:00:00" //待转化为时间戳的字符串 注意 这里的小时和分钟还要秒必须写 因为是跟着模板 ...
- strlen函数
笔试题:不使用中间变量求const字符串长度,即实现求字符串长度库函数strlen函数.函数接口声明如下:int strlen(const char *p); http://soft.chinabyt ...
- hiho_1089_floyd最短路
题目 floyd算法求所有顶点之间的最短路,典型的模板题.唯一需要注意的是两个顶点之间可能有多条边直接相连,在初始化的时候,直接选择最小的长度作为两点间的距离即可. 实现 #include<io ...
- android,JNI创建进程,使用fork()
long add(long x,long y) { pid_t fpid; //fpid表示fork函数返回的值 int count=0; fpid=fork(); if (fpid < 0) ...
- python操作mongodb之七时间和时区
#时间和时区 import datetime db.test.insert_one({"datetime-datetime-utcnow":datetime.datetime.ut ...
- python操作mongodb之六自定义类型存储
from pymongo.mongo_client import MongoClient client=MongoClient('192.168.30.252',27017) client=drop_ ...
- OpenCV3编程入门笔记(5)重要章节小节及核心函数