Code First Migrations Update database structure (data migration) "Go"

Source: Internet
Author: User
Tags connectionstrings

Background

Code first when the model is modified, to persist in the database, the original database is always deleted and then created (dropcreatedatabaseifmodelchanges), this time there is a problem, when our old database contains some test data , we can introduce the data migration function of EF when the original data is lost after the persistent update.

Requirements

    1. NuGet is installed

Procedure Examples [CSharp]View Plaincopyprint?
    1. Original model
Original model
[CSharp]View Plaincopyprint?
  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. }
Using system.collections;using system.collections.generic;using System.componentmodel.dataannotations;public class Lesson {public    int Lessonid {get; set;}    [Required]    [MaxLength ()]    public string Lessonname {get; set;}    [Required]    public string TeacherName {get; set;}    public virtual UserInfo Userinfo{get;set;}}
[CSharp]View Plaincopyprint?
    1. New model
New model
[CSharp]View Plaincopyprint?
  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. }
Using system.collections;using system.collections.generic;using System.componentmodel.dataannotations;public class Lesson {public    int Lessonid {get; set;}    [Required]    [MaxLength ()]    public string Lessonname {get; set;}    [Required]    [MaxLength (Ten)]    public string TeacherName {get; set;}    public virtual UserInfo Userinfo{get;set;}}

Note: The difference is that we add a length limit to the TeacherName attribute.

Next, we're going to start persisting this model into the database (we're just modifying the property now, the length of this field in the database is nvarchar (max), not nvarchar (10))

1: Configure the database connection in config:

[HTML]View Plaincopyprint?
    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>   
  <connectionStrings>    <add name= "Testusersdb" connectionstring= "Integrated Security=sspi; Persist Security info=false;initial catalog=testusersdb;data source=xcl-pc\sqlexpress "Providername=" System.Data.SqlClient "/>  </connectionStrings>

2: Open the NuGet console:

3: Run command enable-migrations

The following error may occur:

Checking If the context targets an existing database ... Detected database created with a database initializer. scaffolded migration ' 201212090821166_initialcreate ' corresponding to existing database. To use an automatic migration instead, delete the Migrations folder and re-run enable-migrations specifying The-enableaut Omaticmigrations parameter. Code first migrations enabled for Project MvcApplication1.

The following folder appears in the project:

Opening the Configuation.cs will make the following changes:

[CSharp]View Plaincopyprint?
    1. Public Configuration ()
    2. {
    3. automaticmigrationsenabled = true;
    4. }
        Public Configuration ()        {            automaticmigrationsenabled = true;        }

Execute Update-database again:

Since I changed the length from Max to 10, when I update the data structure, it thinks this operation will result in data loss, as follows:

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 wasn't applied because it would result in data loss.

If you're sure it's okay, just add a mandatory parameter to the command:

Enable-migrations-force

Last re-execution: update-database

The original data in the database is not lost!

3:

Code First Migrations Update database structure (data migration) "Go"

Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.