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里的数据匹配,应该就能避免这个问题。

时间: 2024-10-03 18:26:22

EF Code-First数据迁移的尝试的相关文章

EF Code First 数据迁移

背景: EF Code First在经历新业务或者业务逻辑变更时,可能会遇到数据库的更改,比如新增表 ,更改表加字段,等等.这个时候,删除原来的数据库重建会丢失数据. 方案1: 如果初次开发,可以选择删除重建. 代码: public TestDbContext() : base("Name=TestConnection") { Database.SetInitializer<TestDbContext>(new DropCreateDatabaseIfModelChange

EF code First数据迁移学习笔记(转)

转自:http://www.cnblogs.com/icyJ/p/migration.html 准备工作 1.新建一个控制台项目, 在"程序包管理控制台"执行 Install-package EntityFramework  //安装EF环境 2.在项目下新建类(Paper),也就是code first中的code.建好之后,Ctrl+Shift+B生成项目.(不生成的话,会出现控制器找不到类型或者其他报错) 3.在app.config或web.config的configuration

EF code First数据迁移学习笔记

准备工作 1.新建一个控制台项目, 在"程序包管理控制台"执行 Install-package EntityFramework  //安装EF环境 2.在项目下新建类(Paper),也就是code first中的code.建好之后,Ctrl+Shift+B生成项目.(不生成的话,会出现控制器找不到类型或者其他报错) 3.在app.config或web.config的configuration下添加节点connectionStrings: <connectionStrings>

MVC 使用EF Code First数据迁移之添加字段

PM> add-migration 20161109正在为迁移“20161109”搭建基架.此迁移文件的设计器代码包含当前 Code First 模型的快照.在下一次搭建迁移基架时,将使用此快照计算对模型的更改.如果对要包含在此迁移中的模型进行其他更改,则您可通过再次运行“Add-Migration 20161109”重新搭建基架.PM> update-database指定“-Verbose”标志以查看应用于目标数据库的 SQL 语句.正在应用显式迁移: [201611090641341_20

图文详解 解决 MVC4 Code First 数据迁移

在使用Code first生成数据库后 当数据库发生更改时 运行程序就会出现数据已更改的问题  这时可以删除数据库重新生成解决 但是之前的数据就无法保留  为了保留之前的数据库数据  我们需要使用到Code first数据迁移 首先如果需要更改数据结构  必须是先更改model类 然后使用Code firs数据迁移  如果直接先更改了数据库 则使用数据迁移会报错 使用Code firs数据迁移图解 工具-->库文件包程序管理器-->程序包管理控制台  如图 注意观察 默认项目  和程序包源 因

Code First 数据迁移 转

一.为模型更改设置 Code First 数据迁移 1.工具—>库程序包管理器—>程序包管理器控制台—>输入“Enable-Migrations”  或者 Enable-Migrations -ContextTypeName Mvc.Models.DataContext Enable-Migrations -ContextTypeName 命名空间.上下文名称 注:如果正确的话 则显示“已为项目 xxx启用 Code First 迁移.”, Enable-Migrations命令创建了一

C#+EntityFramework编程方式详细之Code First 数据迁移

在前几篇的C#+EntityFramework编程方式中介绍了C#+EntityFramework编程方式Code First ,Model First以及Dtatabase First 等编程方式,其中Model First以及Dtatabase First中,如果实体类(Model First)或者数据库(Dtatabase First)变化了,那么就需要数据库(Model First)或者实体类(Dtatabase First)来相应的变化,以保持实体类(Model First)和数据库(

EF架构~CodeFirst数据迁移与防数据库删除

回到目录 本文介绍两个概念,防数据库自动删除,这是由于在code first模式下,当数据实体发生变化时,会对原来数据库进行删除,并将新数据表添加进来,但这对于我们的运营环境数据库,是万万不能接受的,第二个问题是数据迁移问题,当你有新的实体建立后,如何响应到数据库,这成为一个问题,当然实现也很简单,我们直接使用migrations工具即可. 一 防数据库删除 将你的业务DbInitializer的基类改成CreateDatabaseIfNotExists即可解决这个问题,这是在数据初始化时需要做

EntityFramework4.3.1 Code First 数据迁移

现有数据库生成Code First 代码,先下载 Entity Framework Power Tools https://visualstudiogallery.msdn.microsoft.com/72a60b14-1581-4b9b-89f2-846072eff19d/ 如果找不到Nuget就先安装了,在工具-扩展管理器里直接安装.(如下图) 需要通过 NuGet 的 Package Manager Console 输入相关命令. Enable-Migrations -StartUpPro