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模式下,当数据实体发生变化时,会对原来数据库进行删除,并将新数据表添加进来,但这对于我们的运营环境数据库,是万万不能接受的, ...
随机推荐
-
【bzoj2073】[POI2004]PRZ
题目描述 一只队伍在爬山时碰到了雪崩,他们在逃跑时遇到了一座桥,他们要尽快的过桥. 桥已经很旧了, 所以它不能承受太重的东西. 任何时候队伍在桥上的人都不能超过一定的限制. 所以这只队伍过桥时只能分批 ...
-
Visual Studio 2013 Web开发、新增功能:“Browser Link”
微软正式发布Visual Studio 2013 RTM版,微软还发布了Visual Studio 2013的最终版本..NET 4.5.1以及Team Foundation Server 2013. ...
-
常用命令su ls cp cd mv cat touch mkdir rm head less more pwd tac 等
1.用户切换 su:switch user su kevin //半切换,切换到kevin用户,但是不读取kevin用户的配置文件 su - kevin //完全切换,执行这个命令的时候表示切 ...
-
ulimit小结
1. limits是一个进程的资源,会被子进程继承 2. soft limit -S, hard limits -H hard limits只能被root用户修改,启动的时候会加载配置/etc/s ...
-
BZOJ_1485_[HNOI2009]有趣的数列_卡特兰数
BZOJ_1485_[HNOI2009]有趣的数列_卡特兰数 Description 我们称一个长度为2n的数列是有趣的,当且仅当该数列满足以下三个条件: (1)它是从1到2n共2n个整数的一个排列{ ...
-
C++的IO处理中的头文件以及类理解(2)<;sstream>;头文件
C++的IO处理中的头文件以及类理解(2)<sstream>头文件 头文件<sstream>中定义的类型都继承iostream头文件中定义的类型.除了继承得来的操作,sstre ...
-
zabbix yum安装
1. 安装zabbix yum源 rpm -Uvh https://repo.zabbix.com/zabbix/4.0/rhel/6/x86_64/zabbix-release-4.0-1.el6. ...
-
论文笔记:Attention Is All You Need
Attention Is All You Need 2018-04-17 10:35:25 Paper:http://papers.nips.cc/paper/7181-attention-is-a ...
-
Xfire实现webservice时,对象传递规则及解析简析
Xfire实现webservice,传递对象解析的话,要分两种情况处理:1.基本类型对象:2.复杂对象 其实,在客户端直接传递数组,如String[] int[]等这些无法通过配置具体类型来通知xfi ...
-
c# 事实证明,abstract类除了不能用new实例化和类没什么区别
abstract类是抽象类,不能够实例化,大家都知道,abstract类往往和接口interface一块儿使用,针对接口中一些公共的方法进行实现,然后实体类去继承抽象类和接口.虽然abstract类不 ...