Arquivo de julho, 2015

O Language Integrated Query (LINQ) é um componente do Microsoft .NET que adiciona funcionalidades de consulta em algumas linguagens de programação .NET. O LINQ corresponde a uma sintaxe unificada, inicialmente incorporada às linguagens C# e Visual Basic, para consultas em fontes de dados variadas. A sintaxe de consulta da LINQ foi inspirada na Structured Query Language (SQL), que é uma linguagem padrão para comunicação com bancos de dados relacionais. Assim como na linguagem SQL, as expressões de consulta LINQ permitem a construção de instruções variadas para extração de informações.  Ele define um conjunto de métodos chamados operadores de consulta, expressões lambda e tipos anônimos.

O LINQ é um conjunto de recursos introduzidos no Visual Studio 2008 que amplia os poderosos recursos de consulta para a sintaxe da linguagem C# e Visual Basic. O LINQ proporciona padrões intuitivos para o desenvolvimento queries para consulta e atualização de dados além de poder ser extendida para dar suporte a qualquer tipo de banco de dados. O Visual Studio inclui assemblies provedores de LINQ que permitem o uso do LINQ com coleções do .NET Framework, bancos de dados do SQL Server, conjuntos de dados ADO.NET e documentos XML.

LINQ: https://msdn.microsoft.com/pt-br/library/bb397897.aspx

101 Exemplos LINQ: https://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b

Usando o LINQ

1 – Você pode criar uma aplicação web MVC usando o template padrão, criar um modelo de dados Code First e alimenta-lo com alguns dados no banco de dados MSSQL ou usar o exemplo anterior clicando aqui. Você deve obter uma página web com uma visão que exibe os seguintes dados:

MVC - Aplicação

MVC – Aplicação

2 – Modifique o controlador e a visão de acordo com os códigos abaixo para criar uma pesquisa e uma busca para sua visão:

LINQ - Seleção e Busca

LINQ – Seleção e Busca

Exemplo:

Neste exemplo utilizamos a aplicação criada anteriormente e utilizamos a linguagem LINQ para exibir os dados exibidos na visão e também para criar uma pesquisa que busca os caracteres iniciais do campo chamado cursos.

C#

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(string busca = null)
        {
            // Usando uma sintaxe simples do LINQ
            // Seleciona todos as propriedades dos cursos
            // Ordena pela propriedade curso
            // e pesquisa por caracteres iniciais do campo curso

            var modelo = from r in DB.Cursos
                         where busca == null || r.Curso.StartsWith(busca)
                         orderby r.Curso
                         select r;
                
            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();
        }
    }
}

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>
<form>
    <input type="search" name="busca" />
    <input type="submit" name="Buscar por nome" />
</form>
<br />
<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>

 

ASP NET – Migrations – Razor – MVC – C#

Publicado: 4 de julho de 2015 em C#

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:

MVC - String de conexão

MVC – String de conexão

2 – Crie sua classe de acesso a dados passando a string de conexão que você deseja utilizar:

MVC - Contexto do Banco de Dados

MVC – Contexto do Banco de Dados

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:

MVC - Novo Banco

MVC – Novo Banco

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:

SQL - Diagrama

SQL – Diagrama

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

MVC - Migrations

MVC – Migrations

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

Configuração -Migrations

Configuração -Migrations

7 – Você pode rodar a sua aplicação e desta vez a migração adicionou os dados iniciais ao banco de dados:

MVC - Aplicação

MVC – Aplicação

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" }
                   }
                }
            );
        }
    }
}