Code First Migrations更新数据库结构(数据迁移)

背景

code first起初当修改model后,要持久化至数据库中时,总要把原数据库给删除掉再创建 (DropCreateDatabaseIfModelChanges),此时就会产生一个问题,当我们的旧数据库中包含一些测试数据时,当持久化更新 后,原数据将全部丢失,故我们可以引入EF的数据迁移功能来完成。

要求

  1. 已安装NuGet

过程示例

[csharp] view plaincopy

  1. //原model

[csharp] view plaincopy

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using System.ComponentModel.DataAnnotations;
  4. public class Lesson {
  5. public int lessonID { get; set; }
  6. [Required]
  7. [MaxLength(50)]
  8. public string lessonName { get; set; }
  9. [Required]
  10. public string teacherName { get; set; }
  11. public virtual UserInfo UserInfo{get;set;}
  12. }

[csharp] view plaincopy

  1. //新model

[csharp] view plaincopy

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using System.ComponentModel.DataAnnotations;
  4. public class Lesson {
  5. public int lessonID { get; set; }
  6. [Required]
  7. [MaxLength(50)]
  8. public string lessonName { get; set; }
  9. [Required]
  10. [MaxLength(10)]
  11. public string teacherName { get; set; }
  12. public virtual UserInfo UserInfo{get;set;}
  13. }

注:区别在于,我们给teacherName属性加了一个长度限制。

接下来,我们将开始持久化此model至数据库中(我们现在只是对属性作修改,此时数据库中此字段的长度为nvarchar(max),并不是nvarchar(10))

1:在config中配置数据库连接:

[html] view plaincopy

  1. <connectionStrings>
  2. <add name="TestUsersDB" connectionString="Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=TestUsersDB;Data Source=XCL-PC\SQLEXPRESS" providerName="System.Data.SqlClient" />
  3. </connectionStrings>

2:打开NuGet控制台:

3:运行命令Enable-Migrations

可能会出现如下错误:

  • {
  • AutomaticMigrationsEnabled = true;
  • }

再次执行Update-Database:

因为我把长度从max改为10,在更新数据结构时,它认为此操作会导致数据丢失,如下:

Specify the ‘-Verbose‘ flag to view the SQL statements being applied to the target database.
No pending code-based migrations.
Applying automatic migration: 201212090848057_AutomaticMigration.
Automatic migration was not applied because it would result in data loss.

如果确保没事,只需给此命令加个强制执行的参数即可:

Enable-Migrations -Force

最后再次执行:Update-Database

数据库中的原数据也没有丢失!

时间: 2024-12-26 12:55:22

Code First Migrations更新数据库结构(数据迁移)的相关文章

Code First Migrations更新数据库结构(数据迁移) 【转】

背景 code first起初当修改model后,要持久化至数据库中时,总要把原数据库给删除掉再创建(DropCreateDatabaseIfModelChanges),此时就会产生一个问题,当我们的旧数据库中包含一些测试数据时,当持久化更新后,原数据将全部丢失,故我们可以引入EF的数据迁移功能来完成. 要求 已安装NuGet 过程示例 [csharp] view plaincopyprint? //原model //原model [csharp] view plaincopyprint? us

ASP.NET MVC4 新手入门教程特别篇之一----Code First Migrations更新数据库结构(数据迁移)修改Entity FrameWork 数据结构(不删除数据)

背景 code first起初当修改model后,要持久化至数据库中时,总要把原数据库给删除掉再创建(DropCreateDatabaseIfModelChanges),此时就会产生一个问题,当我们的旧数据库中包含一些测试数据时,当持久化更新后,原数据将全部丢失,故我们可以引入EF的数据迁移功能来完成. 要求 已安装NuGet 过程示例 原model using System; using System.Collections.Generic; using System.Linq; using

Code First Migrations更新数据库结构的具体步骤

我对 CodeFirst 的理解,与之对应的有 ModelFirst与 DatabaseFirst ,三者各有千秋,依项目实际情况自行选择. 1.开发过程中先行设计数据库并依此在项目中生成 *.dbml 或是 *.edmx 文件的,就是DatabaseFirst: 2.开发时先建立空的 *.edmx 文件,由此文件生成数据库的,就是ModelFirst: 3.使用 System.Data.Entity. DbContext 与 System.Data.Entity. DbSet构建数据模型,没有

(转)使用Migrations更新数据库结构(Code First )

原文地址:http://blog.csdn.net/luoyeyu1989/article/details/8275237 背景 code first起初当修改model后,要持久化至数据库中时,总要把原数据库给删除掉再创建(DropCreateDatabaseIfModelChanges),此时就会产生一个问题,当我们的旧数据库中包含一些测试数据时,当持久化更新后,原数据将全部丢失,故我们可以引入EF的数据迁移功能来完成. 要求 已安装NuGet 过程示例 //原model 1 using S

Code First 下自动更新数据库结构(Automatic Migrations)

示例 Web.config <?xml version="1.0" encoding="utf-8"?> <configuration> <configSections> <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramew

Code First 更新数据库结构

参考:http://blog.csdn.net/sxycxwb/article/details/12186159 0.删除之前的数据库 1.Run the Enable-Migrations command in Package Manager Console 进入(PM)软件包管理控制台 (视图——>其他窗口——>程序包管理控制台)输入以下指令:Enable-Migrations 会提示:"No context type was found in the assembly"

EF Code First:实体映射,数据迁移,重构(1)

一.前言 经过EF的<第一篇>,我们已经把数据访问层基本搭建起来了,但并没有涉及实体关系.实体关系对于一个数据库系统来说至关重要,而且EF的各个实体之间的联系,实体之间的协作,联合查询等也都依赖于这些实体关系. 二.实体映射 实体与数据库的映射可以通过DataAnnotation与FluentAPI两种方式来进行映射: (一) DataAnnotation DataAnnotation 特性由.NET 3.5中引进,给.NET中的类提供了一种添加验证的方式.DataAnnotation由命名空

EF6 Code First 模式更新数据库架构

定义好实体类和上下文类 在 Package Manager Console 输入以下命令 1.Enable-Migrations 启用数据迁移功能,该命令通常会在项目根目录下生成 Migrations 文件夹,文件夹内通常会有两个文件 201408020650593_InitialCreate.cs -- 迁移前的数据结构,前半段为时间戳 Configuration.cs -- 相关配置,是否需要自动迁移等,默认为 false 2.Add-Migration 增加迁移点,输入该命令后会要求你输入

较复杂情况下小型数据库的数据迁移

虽然在操作之前作过一些测试,但主要考虑脚本的正确与否以及对数据库对象的影响.并没有完全在实际系统上运行.这也成为后来出现的一个问题没有预计到的根源.毕竟比较早的版本我没有用过:).那就是8.0.6的exp工具并支持到处数据到多个文件,file=file1,file2不能使用,而且也不清楚老的hp-unix是32位的时候支持大于2g的文件,而且8.0.6是否可以导出一个大于2G文件.后来出现问题之后经过查证系统支持,此避免使用磁带机或者文件压缩的方式(具体方法网络上有相关资料).   由于考虑到加