Миграция Базы Данных в Entity Framework
last updated: 13 May 2020
Миграция - это изменение базы данных. То есть:
• добавление, удаление, изменение колонок в базе данных
• добавление новых таблиц в базе данных
В каких случаях применяется миграция Базы Данных:
• при изменении сущности (класса описывающего таблицу базы данных). Cущности содержатся в контексте данных.
План (6 шагов)
Шаг 1. Создаем новое приложение
Шаг 2. Напишем код
C#
В файл Program.cs добавили код выделенные синим цветом:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.Entity;
namespace ConsoleApplication1
{
// сущность (соответствует таблице в базе данных)
public class User
{
public int Id { get; set; }
public int FullName { get; set; }
}
// сущность (соответствует таблице в базе данных)
public class Book
{
public int Id { get; set; }
public string Name { get; set; }
public int Price { get; set; }
public int Author { get; set; }
}
// контекст данных
class UserContext : DbContext
{
public UserContext() : base("MyConnection1" )
{ }
public DbSet<Book> Books { get; set; }
public DbSet<User> Users { get; set; }
}
// вход программы
class Program
{
static void Main (string [] args)
{
// add data
using (UserContext db = new UserContext())
{
// показываем данные
foreach (var item in db.Books)
{
Console .WriteLine(item.Name);
}
}
}
}
}
При запуске примера (чтение данных из базы данных) возникает ошибка!
Ошибка! Unhandled Exception: System.InvalidOperationException: The model backing the 'UserContext' context has changed since the database was created.
Шаг 3. Создаем миграцию: enable-migrations
Нажимаем в меню: Tools → NuGet Package Manager → Package Manager Console
Вводим команду
PM>
Шаг 4. Добавляем миграцию (создание cs файла): entityframework\add-migration
Нажимаем в меню: Tools → NuGet Package Manager → Package Manager Console и вводим команду
PM>
EntityFramework\Add-Migration
или
EntityFramework6 \Add-Migration
это зависит от версии Entity Framework
нажимаем ввод и нужно ввести название (файл миграции с таким названием будет создан):
Command Prompt (Win Console)
Name: Schema_v04
нажимаем ввод
Видим, что в папке Migrations добавился файл 201903010912485_Schema_v04.cs с миграцией.
C#
Файл 201903010912485_Schema_v04.cs
namespace ConsoleApplication1.Migrations
{
using System;
using System.Data.Entity.Migrations;
public partial class InitialCreate1 : DbMigration
{
public override void Up ()
{
CreateTable (
"dbo.Users" ,
c => new
{
Id = c.Int(nullable: false, identity: true),
FullName = c.Int(nullable: false),
})
.PrimaryKey(t => t.Id);
AddColumn ("dbo.Books" , "Author" , c => c.Int(nullable: false));
}
public override void Down ()
{
DropColumn ("dbo.Books" , "Author" );
DropTable ("dbo.Users" );
}
}
}
В миграции определяются два метода: Up() и Down().
В методе Up с помощью вызова метода AddColumn добавляется новый столбец в уже имеющуюся таблицу.
Метод Down удаляет столбец на случай, если они существуют.
Фактически эти методы равнозначны выражению ALTER в языке SQL, которое меняет структуру базы данных и ее таблиц.
Шаг 5. Выполняю миграцию (создание таблиц в базе данных): EntityFramework\Update-Database
Нажимаем в меню: Tools → NuGet Package Manager → Package Manager Console и вводим команду
PM>
EntityFramework\Update-Database
или
EntityFramework6 \Update-Database
это зависит от версии Entity Framework
нажимаем ввод и получим результат:
Шаг 6. Проверяем как обновилась База данных в Microsoft SQL Server
Открываем
SQL Server Management Studio
Видим что добавилась новая колонка
Auithor для таблицы
Books
Видим что добавилась новая таблица
Users