Quando você desenvolve um novo aplicativo, o seu modelo de dados muda com frequência, e cada vez que o modelo é alterado, ele fica fora de sincronia com o banco de dados. Você pode configurar o Entity Framework para excluir automaticamente e re-criar o banco de dados cada vez que você alterar o modelo de dados. Quando você adiciona, remove ou altera classes de entidade ou alterar a classe DbContext, na próxima vez que você executar o aplicativo ele automaticamente exclui o banco de dados existente, cria um novo que corresponda ao modelo, visto que este tipo de configuração automática é preciso que você utilize ambientes em seu desenvolvimento, como Sandbox, Testes, DEV e etc…
O Migrations permite que você gere atualizações gerenciáveis no seu banco de dados, ou deixar que o próprio Migrations cuide de tudo de forma automática, seu propósito é manter seu banco de dados sempre atualizado com suas classes. O Migrations é muito utilizado em aplicações com o padrão MVC e se tornou popular no Framework Rails também é utilizado em ASP.NET de forma muito similar.
Utilizando Migrations
1 – Crie uma aplicação ASP.NET MVC usando o template padrão. No arquivo WebConfig crie sua string de conexão padrão, visto que o banco de dados será criado de acordo com o nome que você utilizar, use a figura abaixo para referencia:
2 – Crie sua classe de acesso a dados passando a string de conexão que você deseja utilizar:
3 – Substitua ou crie as classes abaixo de sua aplicação e rode, você vai obter uma pagina vazia, pois o banco de dados acabou de ser criado automaticamente e ainda não possui nenhuma informação:
4 – Se você desejar pode abrir o estúdio do SQL Server e verificar o banco e as tabelas criadas automaticamente pelo EF, você pode utilizar um diagrama para melhor entendimento do que foi criado, incluindo o seu relacionamento:
5 – Assim como no Rails, o ASP.NET MVC nos permite utilizar as migrações através da linha de comando, para isto vamos utilizar a janela chamada Package Manage Console que executa comandos do Windows PowerShell. Para abrir a janela utilize o menu View->Other Windows->Package Manage Console. Atente-se a figura abaixo, você pode perceber que uma nova pasta para as migrações foi criada em sua aplicação.
Digite o comando: Enable-Migrations -ContextTypeName MinhaAppMeuDB
6 – Você pode adicionar dados a serem gravados toda vez que você migrar o banco de dados utilizando o método Seed, preencha a classe de configuração da migração e digite o comando: Update-Database -Verbose
7 – Você pode rodar a sua aplicação e desta vez a migração adicionou os dados iniciais ao banco de dados:
Exemplo:
Neste exemplo criamos um banco de dados e inserimos dados iniciais de utilizando o Migrations.
C#
Modelos
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Web;
namespace WebApplication1.Models
{
public class MinhaAppMeuDB : DbContext
{
// Define string de conexão de sua aplicação
public MinhaAppMeuDB() : base("name=DefaultConnection")
{ }
public DbSet<CursosModelo> Cursos { get; set; }
public DbSet<GradeModelo> Grades { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace WebApplication1.Models
{
public class CursosModelo
{
// Propriedades
public int Id { get; set; }
public string Curso { get; set; }
public string Linguagem { get; set; }
public string Descr { get; set; }
// Aponta para o Grade
public ICollection<GradeModelo> Cursos { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace WebApplication1.Models
{
public class GradeModelo
{
// Propriedades
public int Id { get; set; }
public string Dia { get; set; }
public string hora { get; set; }
// Cria relacionamento
public int IdCursoModelo { get; set; }
}
}
Visão
@model IEnumerable<WebApplication1.Models.CursosModelo>
@{
ViewBag.Title = "Home Page";
}
<div class="jumbotron">
<h1>Desenvolvimento Aberto - ASP.NET</h1>
<p class="lead">ASP.NET - MVC - Entity Framework - HTML, CSS and JavaScript.</p>
</div>
<table style="width:700px">
<tr>
<th>Cursos</th>
<th>Linguagem</th>
<th>Descrição</th>
</tr>
@foreach (var item in Model)
{
<tr>
<td>@item.Curso</td>
<td>@item.Linguagem</td>
<td>@item.Descr</td>
</tr>
}
</table>
Controlador
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using WebApplication1.Models;
namespace WebApplication1.Controllers
{
public class HomeController : Controller
{
// Cria instancia do banco de dados
MinhaAppMeuDB DB = new MinhaAppMeuDB();
public ActionResult Index()
{
var modelo = DB.Cursos.ToList();
return View(modelo);
}
// Cria método override
protected override void Dispose(bool disposing)
{
// Limpa os recursos
if (DB != null)
{
DB.Dispose();
}
base.Dispose(disposing);
}
public ActionResult About()
{
ViewBag.Message = "Your application description page.";
return View();
}
public ActionResult Contact()
{
ViewBag.Message = "Your application description page.";
return View();
}
}
}
Migração
namespace WebApplication1.Migrations
{
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Data.Entity.Migrations;
using System.Linq;
internal sealed class Configuration : DbMigrationsConfiguration<WebApplication1.Models.MinhaAppMeuDB>
{
public Configuration()
{
AutomaticMigrationsEnabled = true;
ContextKey = "WebApplication1.Models.MinhaAppMeuDB";
}
protected override void Seed(WebApplication1.Models.MinhaAppMeuDB context)
{
// Cria configuração inicial
context.Cursos.AddOrUpdate( r=> r.Curso,
new Models.CursosModelo { Curso = "ASP.NET MVC", Linguagem = "C#", Descr = "Aplicações para web" },
new Models.CursosModelo { Curso = "Ruby on Rails", Linguagem = "Ruby", Descr = "Aplicações para web" },
new Models.CursosModelo { Curso = "Django", Linguagem = "Python", Descr = "Aplicações para web" },
new Models.CursosModelo { Curso = "Java EE", Linguagem = "Java", Descr = "Aplicações para web",
Cursos = new List<Models.GradeModelo> {
new Models.GradeModelo { Dia = "Quarta", hora = "10:30" }
}
}
);
}
}
}








