EntityFramework5.0 数据迁移笔记--解决模型变化重建数据库的问题
2013-06-04 17:29
686 查看
用了Codefirst后最大的困扰就是数据变化引起数据库的删除再新建,这样会造成数据丢失,musicstore中介绍的播种办法也只能满足下测试的需要。在EntityFrameWork5.0中引入了数据迁移功能能很好的解决这个问题。
步骤一:
需要EF5.0,最好用NuGet来安装。工具-->库程序包管理器-->程序包管理控制台(我用的VS2012)
View Code
步骤二:
允许数据迁移,继续输入命令:PM> enable-migrations 会自动生成migration配置文件类,在构造函数中加入黄色mark的部分,允许自动迁移。比如你Model里面修改了字段类型,长度,或者增加了字段。它来自动修改数据库。但这还没有结束
步骤三:修改数据库的构造函数,我的数据库这里是NoteDb ,灰色部分我们之前用的方式,很不好,黄色部分就是支持数据迁移初始化。
总结:这个migration还是省了不少事情,但也不是那么的完全智能,最好不要手动去删除数据库中的表,通过dbset来删除,因为数据库所有的操作记录是记录在数据库中,在系统表的MigrationHistory 中。 你的手动记录是没有存在这里面的。
步骤一:
需要EF5.0,最好用NuGet来安装。工具-->库程序包管理器-->程序包管理控制台(我用的VS2012)
主题 about_NuGet 简短描述 提供有关 NuGet 程序包管理器命令的信息。 详细描述 本主题介绍 NuGet 程序包管理器命令。NuGet 是集成的程序包 管理工具,用于将库和工具添加到 .NET 项目。 包括了以下 NuGet cmdlets。 Cmdlet 描述 ------------------ ---------------------------------------------- Get-Package 获取程序包源中可用的程序包集。 Install-Package 在项目中安装程序包及其依赖项。 Uninstall-Package 卸载程序包。如果其他程序包依赖于此程序包, 则该命令将会失败,除非指定了 -Force 选项。 Update-Package 将程序包及其依赖项更新为较新版本。 Add-BindingRedirect 检查项目输出路径中的所有程序集, 并根据需要将绑定重定向添加到 应用程序(或 Web)配置文件。 Get-Project 为指定的项目返回对 DTE (Development Tools Environment) 的引用。如果未指定任何项目,则返回 程序包管理器控制台中选择的默认项目。 Open-PackagePage 打开浏览器,并指向指定的程序包的 ProjectUrl, LicenseUrl 或 ReportAbuseUrl。 Register-TabExpansion 为命令的参数注册选项卡扩展。 另请参阅 联机文档: http://go.microsoft.com/fwlink/?LinkID=206619 Get-Package Install-Package Uninstall-Package Update-Package Add-BindingRedirect Get-Project Open-PackagePage Register-TabExpansion
View Code
步骤二:
允许数据迁移,继续输入命令:PM> enable-migrations 会自动生成migration配置文件类,在构造函数中加入黄色mark的部分,允许自动迁移。比如你Model里面修改了字段类型,长度,或者增加了字段。它来自动修改数据库。但这还没有结束
namespace NoteSystem.Migrations { using System; using System.Data.Entity; using System.Data.Entity.Migrations; using System.Linq; internal sealed class Configuration<TContext> : DbMigrationsConfiguration<TContext> where TContext:DbContext { public Configuration() { AutomaticMigrationsEnabled = true; AutomaticMigrationDataLossAllowed = true; } } }
步骤三:修改数据库的构造函数,我的数据库这里是NoteDb ,灰色部分我们之前用的方式,很不好,黄色部分就是支持数据迁移初始化。
public NoteDb() : base(DbNameOrDbConnectionstring) { Database.SetInitializer(new MigrateDatabaseToLatestVersion<NoteDb, Configuration<NoteDb>>()); //Database.SetInitializer(new DropCreateDatabaseIfModelChanges<NoteDb>()); }
总结:这个migration还是省了不少事情,但也不是那么的完全智能,最好不要手动去删除数据库中的表,通过dbset来删除,因为数据库所有的操作记录是记录在数据库中,在系统表的MigrationHistory 中。 你的手动记录是没有存在这里面的。
相关文章推荐
- IBM WPS v8.5 数据迁移至DB2时因数据库用户权限不足引起的迁移失败问题解决示例
- 转载自大牛的博文-解决大批量插入数据到数据库中的问题
- oracle 重建索引以及导出所有的索引脚本(可以解决还原数据库文件时先还原数据,在重新用脚本创建索引)
- 数据库---并发控制及其带来的问题丢失修改,读脏数据,不可重复读及解决(程序员级)
- 解决kafka数据目录迁移后,flume无法正常调用Consumer的问题
- 关于arcgis用GP服务模型 生成等直面没有跟地图一致,颜色区设置及数据接收问题的解决方法!
- 支持“XX”上下文的模型已在数据库创建后发生更改。请考虑使用 Code First 迁移更新数据库
- Java调用BCP导入数据到数据库解决标识列ID问题
- 数据库中导出CSV文件与EXCEL文件数据对比可能遇到的问题与解决方法
- spring-boot框架开发的系统读取到的数据库数据相差8小时的问题解决
- 解决Unity播放FBX模型动画时,模型Transform变化问题
- Android笔记--解决使用php文件插入数据到mysql数据库的表中中文变问号的问题
- zabbix监控mongo数据库,数据空白段问题解决
- PHP 从数据库Mysql中读取数据生成excel(解决乱码问题,解决中文变问号问题)
- ASP.NET MVC 如何解决“上下文的模型已在数据库创建后发生更改”问题
- 解决kafka数据目录迁移后,flume无法正常调用Consumer的问题
- 解决kafka数据目录迁移后,flume无法正常调用Consumer的问题
- 关于数据库自增ID数据写入问题的解决
- 解决在评论中能在后台数据库中插入数据,但是在页面不显示的问题(2006-08-27 16:28:19)