Apr 27

Global Windows Azure Bootcamp – Londrina – Pós Evento

Pessoal,

Gostaria de agradecer a todos que participarem do GWAB de Londrina, tivemos mais de 40 pessoas durante o evento onde foi realizado um treinamento que abordou as principais funcionalidades do Windows Azure. Tudo na prática!

Obrigado ao professor Eidy da PUC de Londrina, que nos apoiou cedendo o espaço para realizarmos o evento.

Vejam as fotos aqui no meu Facebook.

Para baixar as aplicações usadas no evento, acesse este link do SkyDrive.

Abraços e até a próxima!

Carlos dos Santos.

Apr 23

Global Windows Azure Bootcamp

Olá pessoal,

Acontecerá no próximo sábado, 27 de abril, o maior evento de Windows Azure já realizado no mundo. Serão mais de 95 cidades ao redor do globo e no Brasil teremos 12 cidades com mais de 6 horas de puro treinamento 100% prático e presencial.

Confira abaixo a relação de todas as cidades que estarão executando a ação, veja a mais próxima de você e inscreva-se pois as vagas são limitadas!

Observação: Inscrições sujeitas a disponibilidade de vaga local.

Estes são os pré-requisitos para participar do bootcamp:

Para saber mais como será o treinamento visite o site oficial do evento http://globalwindowsazure.azurewebsites.net/

Grande abraço e nos vemos no sábado!

Mar 31

Como escolher o modelo ideal de TFS para sua empresa

Pessoal,

Semana passada aconteceu o MVP Virtual Conference (http://mvpvirtualconference.azurewebsites.net), um evento totalmente online, com várias trilhas de mais de 45 palestras, e eu tive a honra de participar da organização deste evento cuidando também da trilha de Gerenciamento de Equipes de Desenvolvimento junto com o André Dias.

Gostaria de agradecer a todos que participaram também da minha palestra no dia 26/03/2013. Foram mais de 120 pessoas online. Muitíssimo obrigado!!!

O PPT da apresentação está disponível no slideshare no endereço: http://www.slideshare.net/carloscds/mvp-virtual-conferencecarlosdossantos

Abraços e até a próxima.
Carlos dos Santos

Mar 17

MVP Virtual Conference

Microsoft Virtual Conference

A comunidade de Microsoft Most Valuable Professionals (MVP) convida você para participar do MVP Virtual Conference dias 26, 27 e 28 de Março de forma 100% online.

Aproveite essa oportunidade de entender e tirar suas dúvidas sobre como as tecnologias e produtos Microsoft podem te ajudar a solucionar problemas e/ou otimizar tarefas do seu dia a dia. Aprenda diretamente com MVPs, profissionais reconhecidos pela Microsoft, independentes e especialistas, além de convidados especiais da comunidade técnica brasileira e da Microsoft, como os arquitetos do Microsoft Technology Center (MTC).

Objetivo
Apresentar online capacidades e funcionalidades de produtos e tecnologias Microsoft dentro de um contexto baseado em cenários do mundo real.

Formato
O evento conta com nove diferentes trilhas, abordando tópicos relevantes a cenários do dia a dia para as empresas, profissionais de TI e desenvolvedores. Durante cada dia de evento, três trilhas serão apresentadas por completa de forma online no formato de um webcast. Cada trilha comtemplará apresentações sobre tecnologias e produtos Microsoft dentro de um especifico cenário, finalizando com uma rica sessão estilo roundtable com todos os palestrantes da trilha.
Horário das palestras: Das 08:45 às 17:00hrs com intervalo para almoço das 11:30 às 13:00hrs.

Inscrição
As inscrições são abertas a todos os interessados. Escolha o(s) tópico(s) que mais lhe interessam, clique no respectivo link para realizar a inscrição e receber uma confirmação via e-mail para adicionar ao seu calendário. Fique à vontade em convidar outras pessoas. Clique no assunto de seu interesse abaixo para realizar a inscrição. Clique aqui para ver a lista de palestras que você irá encontrar em cada um dos nove assuntos principais.

Dia 26 de Março / terça-feira

Consumerização de TI
Responsável: Alexandro Prado – MVP
Palestrantes: Jorge Barata (MVP), Paulo Sant´anna (MTAC), Marcondes Alexandre (MVP), Igor Humberto (MTAC), Rover Marinho (MVP)
Exemplo de cenário
: Para você profissional da área, entender Consumerização de TI e as tecnologias que viabilizam isso passam a ser essenciais para você alcançar e ser bem sucedido na sua empresa e acompanhar essa tendência do mercado de TI. Acompanhe esse tema e aprenda como aplicar as tecnologias Microsoft no mundo real.
Inscreva-se agora

Segurança
Responsável: Rodrigo Immaginario – MVP
Palestrantes: Rodrigo Immaginario (MVP), Alberto Oliveira (MVP), Luciano Lima (MVP), Marcos Tupinambá (MVP)
Exemplo de cenário abordado: Uma empresa de consultoria, que possui diversos colaboradores trabalhando de forma remota, recentemente identificou diversas falhas de segurança em sua rede local e na proteção dos seus projetos confidenciais. Para melhorar a segurança do seu ambiente será adotado o conceito de “defesa em profundidade” mas o projeto deverá ser implementado com o mínimo de investimento e em curto espaço de tempo. Veja como as tecnologias já disponíveis nos sistemas operacionais da Microsoft (Server e Client) pode ajudar.
Inscreva-se agora

Gerenciamento de Projetos e Equipes de Desenvolvimento
Responsáveis: André Dias – MVP / Carlos dos Santos – MVP
Palestrantes: Carlos dos Santos (MVP), Ramon Durães (MVP), Marcelo Azuma (MVP), Cláudio Leite (ALM Ranger), André Dias (MVP), Igor Abade (MVP), Adriano Bertucci (MVP), Marcio Sete (MVP)
Exemplo de cenário abordado: Uma empresa de médio porte está em franco crescimento, aproveitando oportunidades do mercado. Suas aplicações estão se tornando mais complexas e o time de desenvolvedores está crescendo. Nos últimos anos, a empresa tem sofrido com uma demanda crescente por suporte, devido constantes falhas no software em produção. A qualidade do software gerado pelos times é sofrível e essa percepção tem crescido no mercado. A empresa espera continuar crescendo, mas precisa corrigir e evitar novos problemas com a gestão de seu processo de desenvolvimento de software. Recentemente, a empresa ouviu falar sobre as novas tendências no desenvolvimento ágil e os benefícios da abordagem para Modern Apps.
Inscreva-se agora

Dia 27 de Março / quarta-feira

Interoperabilidade no Desenvolvimento e Infraestrutura
Responsáveis: André Ruschel – MVP / Rogério de Carvalho – MVP
Palestrantes: André Ruschel (MVP), Rogério Moraes de Carvalho (MVP), Rogerio Cordeiro (Microsoft)
Exemplo de cenário: Uma empresa ampliou seu ambiente de TI recentemente, após a aquisição de duas novas empresas do mercado. Os ambientes de TI das 3 unidades são heterogêneos, contemplando diferentes cenários para monitoração, segurança, bancos de dados, desenvolvimento de aplicações e integração de processos. Mesmo antes da consolidação de todas as unidades, a empresa enfrenta uma demanda crescente por aplicações consumindo informações das 3 unidades de negócio, que rodam em plataformas heterogêneas. As equipes de desenvolvimento e infraestrutura precisam decidir quais são as tecnologias e abordagens para esse cenário de interoperabilidade interna na empresa.
Inscreva-se agora

Arquitetura e Gerenciamento de TI
Responsável: Marcelo Sincic – MVP
Palestrantes: Marcelo Sincic (MVP), Hélio Panissa (MVP), Waldemir Cambiucci (Microsoft), Daniel Donda (MVP)
Exemplo de cenário: Uma empresa possui um datacenter de 3ª geração, baseado em servidores blades adotados de diferentes fornecedores. Ao longo dos anos, a empresa tem usado fortemente o modelo de virtualização, mas tem enfrentado desafios no gerenciamento de sua TI. Constantemente, VM’s são perdidas, o processo de suporte e provisionamento é lento e não existe um portal de autoatendimento para os clientes de TI, o que exige horas de atendimento telefônico e atrasos constantes nas requisições. A empresa adota alguns processos de ITIL v3, mas não possui uma ferramenta unificada de gestão de processos ITIL.
Inscreva-se agora

Desenvolvimento de Software e Aplicativos
Responsáveis: Renato Haddad – MVP / André Carlucci – MVP
Palestrantes: Renato Haddad (MVP), Victor Cavalcante (MVP), André Carlucci (MVP), Rodolpho Marques (MVP)
Exemplo de cenário: Uma empresa da área anúncios desenvolve aplicações para seus mais de 10 mil clientes e está em franco crescimento. O perfil de seus clientes está na classe média, consumindo cada vez mais dispositivos móveis, mas também acessando informações da empresa através de desktops em casa, no trabalho ou através de sites na Web. Como desenvolver novas aplicações atendendo a todos esses requisitos?
Inscreva-se agora

Dia 28 de Março / quinta-feira

Produtividade, colaboração e comunicação unificada
Responsável: João Benito Savastano – MVP
Palestrantes: Fernando Andreazi (MVP), Sara Barbosa (MVP), André Xavier (MVP), Eduardo Freire (MVP), Fernanda Saraiva (MVP), Andrea Morais (Microsoft), João Paulo Sevegnani (Microsoft)
Exemplo de cenário: Uma empresa da área de vendas possui um número grande de vendedores em campo. A maioria de sua força de venda possui pouco tempo para retornar ao escritório ou sincronizar seus dados, acessando as informações da empresa mais de 90% do tempo externamente. Muito processos exigem a aprovação de workflows ou leitura de e-mails do pessoal em campo. Ao mesmo tempo, a empresa tem percebido um aumento crescente em seus gastos com telefonia, devido a maior capilaridade de empresa pelo Brasil.
Inscreva-se agora

Computação em Nuvem
Responsáveis: Lucas Romão – MVP, Evilázaro Alves – MVP, Fabrício Sanchez – MVP
Palestrantes: Lucas Romão (MVP), Evilázaro Alves (MVP), Fabrício Sanchez (MVP), Humberto Silva (Microsoft)
Exemplo de cenário: Pequenas, médias e grandes empresas hoje avaliam sua infraestrutura, em relação aos desafios para o gerenciamento e manutenção do ambiente de TI. O mercado tem apresentado nos últimos anos alternativas para a gestão de TI, através de modelos baseados em nuvem pública ou privada. Mais recentemente, a construção de nuvens híbridas tem recebido destaque em fóruns de arquitetura e gerenciamento de infraestrutura. Uma empresa está hoje com 80% de sua TI baseada em máquinas virtuais sem gerenciamento unificado. Outros 20% estão em máquinas físicas, com aplicações legadas. Como dar o próximo passo?
Inscreva-se agora

BI, Big Data e Gerenciamento de Dados
Responsáveis: Luciano Moreira – MVP, Gustavo Maia – MVP
Palestrantes: Luciano Moreira (MVP), Pericles Rocha (Microsoft), Nilton Pinheiro (MVP), Felipe Ferreira (MVP), Fabiano Amorim (MVP)
Exemplo de cenário: A análise de dados é um dos principais elementos de sucesso para o bom entendimento de diversas linhas de negócio. Sem uma análise de dados robusta, é impossível entender as tendências e comportamento de seu negócio, durante as várias fases de sua execução. Uma empresa da área financeira deseja analisar o comportamento de risco de seus milhares de clientes e investidores. Ela busca ferramentas de análise e mecanismos de integração para consumo de diferentes fontes de dados de seus vários sistemas.
Inscreva-se agora

Para conhecer mais sobre o Programa MVP, visite o site http://mvp.microsoft.com

Acompanhe também as novidades e atividades dos MVPs do Brasil no Facebook e Twitter oficiais do programa no país.

* O MVP Virtual Conference é uma iniciativa independente dos MVPs do Brasil.

Jan 17

Desenvolvimento para Windows 8

Olá pessoal,

Neste primeiro post de 2013 vou falar um pouco somente a minha experiência no desenvolvimento de duas aplicações para Windows 8.

A primeira aplicação eu fiz no final do ano passado, apenas com o intuito de validar o processo de desenvolvimento e publicação na Store da Microsoft. É uma aplicação bem simples, para lista de compras, onde o usuário cria uma lista de compras e relaciona os produtos que vai comprar, podendo enviar esta lista por email através do Share do Windows.

O que achei bem interessante foi a facilidade do desenvolvimento. O Visual Studio ajuda muito e a linguagem C# também, o que torna o desenvolvimento bem rápido. Mas vale a pena ficar em dois apectos fundamentais no desenvolvimento usando C#: primeiro é um bom conhecimento de XAML, pois todo o designer da aplicação é baseado nele, e depois conhecer sobre programação assíncrona, já que é importante manter a resposta para o usuário rápida, afinal ninguem quer clicar em um botão e ficar esperando eternamente algo acontecer.

A segunda aplicação que fiz, na semana passada, me surpreendeu mais ainda. Trata-se de um quadro de reuniões, que o usuário pode “rabiscar” a tela do micro ou do tablet, como se fosse um quadro branco e nesta aplicação eu apliquei recursos de globalização e estou disponibilizando a aplicação em Português e Inglês. Isto foi realmente muito simples de fazer, praticamente nenhuma linha de código, somente aquivos de recursos e tags em XAML. O processo de validação e publicação desta aplicação aconteceu em apenas 2 dias, ou seja, eu enviei para certificação e dois dias depois estava publicado na loja.

A plataforma Windows 8 deixou o desenvolvimento mais interessante e divertido, os recursos são fantásticos e para citar apenas alguns: Share e Search, que são contratos que podem ser implementados na aplicação. Estes recursos proporcionam uma nova visão sobre a interação da applicação com o sistema operacional e também com as outras aplicações.

Para conhecer mais sobre como programar para Wndows 8, você pode começar por aqui:
http://www.microsoft.com/brasil/apps/windows.html

Para conhecer as minhas aplicações:
Lista de Compras: http://apps.microsoft.com/windows/pt-br/app/lista-de-compra/2cb1f61a-6d08-4697-8af0-a313f63cfea5
MeetingBoard:  http://apps.microsoft.com/windows/pt-BR/app/meetingboard/ad8d8944-5e3b-4c00-9211-93cc1c5ebcbf

Começe a desenvolver agora mesmo!

Abraços e até a próxima!
Carlos dos Santos.

Aug 13

TFS com GIT para versionamento local

Olás pessoal,

A Microsoft acaba de anunciar a integração do TFS com o GIT para versionamento local, ou DCVS (Distributed Concurrent Versions System), ou basicamente, versionamento local integrado ao servidor de código.

Na prática você pode estar fora do seu ambiente TFS, trabalhlar normalmente no seu código, fazendo Check-in e Check-out e depois você publica tudo no servidor TFS, integrando o código.

Para quem trabalha fora do ambiente e quer ter um versionador local de código, ou seja, você quer manter mais do que a cópia atual do seu código, este recurso sem dúvida fará a diferença.

No blog do Brian Harry tem um post explicando detalhadamente o processo:
http://blogs.msdn.com/b/bharry/archive/2012/08/13/announcing-git-integration-with-tfs.aspx

Abraços e até a próxima.
Carlos.

Jul 19

Entity Framework–Open Source

Pessoal,

A Microsoft anunciou hoje que o Entity Framework terá seu código fonte Open Source e ela vai contar com a ajuda da comunidade para poder melhorá-lo.

Mesmo sendo Open Source, a Microsoft irá continuar o desevolvimento do produto, e já fala inclusive no roadmap do Entity Framework 6.

Se você tem interesse em conhecer o código fonte, e principalmente, contribuir, acesse o portal do projeto no CodePlex no link: http://entityframework.codeplex.com/

Abraços e até a próxima.
Carlos dos Santos.

Jul 15

Entity Framework Code First–Migrations

Olá pessoal,

Uma das grandes funcionalidades do Entity Framework Code First é o processo de atualização automatica do banco de dados através do pacote chamado Migrations.

O Migrations permite que você, que já trabalha com o CodeFirst, gere atualizações gerenciáveis no seu banco de dados, ou se preferir, deixar que o próprio Migrations cuide de tudo de forma automatica, mantendo seu banco de dados sempre atualizado com suas classes.

Na prática temos duas maneiras de trabalhar com o Migrations:
1. Usar pontos de migração no banco de dados, onde podemos avançar, aplicando as últimas modificações, ou voltar na linha do tempo, em qualquer momento do banco de dados;
2. Usar o modo totalmente automático, onde você não precisa se preocupar em atualizar o banco, pois ao executar o seu programa, isto será feito de maneira automatica.

Mas qual dos dois modelos eu devo utilizar em minha aplicação ? E a resposta é: Depende!. Se você precisa de um controle rigoroso das modificações, se precisa gerar scripts que serão executados no seu ambiente de produção, o melhor é usar o modo mais manual. Mas se o que lhe interessa é manter o banco sempre atualizado, sem se preocupar em rodar scripts, então use o modo automatico.

Neste artigo iremos abordar os dois métodos de utilização do Migrations e após entender cada um você poderá optar pelo que melhor se adequa ao seu processo.

Criando o projeto de exemplo

Antes de começar, vamos criar nosso projeto de exemplo. Eu estou usando o Visual Studo 2012, mas você pode também usar o Visual Studio 2010.

Vamos iniciar criando um projeto do tipo console, com o .Net Framework 4:
image

Logo após criar o projeto, vamos adicionar o Entity Framework CodeFirst usando o NuGet. Para isto abra o gerenciador do NuGet em Tools/Library Package Manager/Packager Manager Console e digite:
image

Após isto teremos o EF CodeFirst instalado em nosso projeto. Vamos agora criar um Contexto e uma classe para podermos trabalhar com o Migrations.

Esta será a nossa classe de Contexto:

public class Contexto : DbContext
    {
        public DbSet<Cliente> Cliente { get; set; }
    }

E esta será a nossa classe de Clientes:

public class Cliente
    {
        public int ID { get; set; }
        public string Nome { get; set; }
    }

Vamos também adicionar um arquivo app.config para identificarmos nosso servidor SQL e o nome do banco de dados:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <connectionStrings>
    <add name="Contexto" providerName="System.Data.SqlClient" connectionString="data source=(local); initial catalog=ExemploMigrations; integrated security=true;"/>
  </connectionStrings>
</configuration>

Agora que já temos nossas classes e o arquivo de configuração, vamos adicionar o Migrations.

Migrations – Gerenciando cada atualização no banco de dados

Vamos inicialmente adicionar o Migrations ao nosso projeto. Independente do método: manual ou automático, precisamos adicioná-lo ao nosso projeto. Faremos isto usando novamente a janela do Nuget através do comando Enable-Migrations:
image

Após este comando, uma nova classe será adicionada ao nosso projeto, o nome dela é Configurations:
image

Como vamos trabalhar com o processo manual, vamos deixar esta classe como está e vamos iniciar com os comandos do Migrations, que devem ser executados na janela do NuGet:

Agora, para todas as alterações que fizermos nas classes executaremos basicamente dois comandos:
Add-Migrations
Update-DataBase

Add-Migrations “nome_migrations” – cria um alteração no banco de dados, onde o “nome_migrations” é o nome que você irá dar para a atualização;
Update-DataBase – aplica as alterações no banco de dados;
Update-DataBase – script – gera um script com os comandos SQL para serem executados no banco de dados.

Para nosso exemplo, iremos executar:
Add-Migrations “CriacaoBanco”
Update-DataBase

Veja que ao executar o Add-Migrations, um novo arquivo foi adicionado ao projeto, contendo os comandos Migrations para o banco de dados:
image

public partial class CriacaoBanco : DbMigration
    {
        public override void Up()
        {
            CreateTable(
                "Clientes",
                c => new
                    {
                        ID = c.Int(nullable: false, identity: true),
                        Nome = c.String(),
                    })
                .PrimaryKey(t => t.ID);

        }

        public override void Down()
        {
            DropTable("Clientes");
        }
    }

Como nosso banco de dados ainda não existia, ele foi criado após o comando Update-DataBase:
image

Para que nossos exemplo fiquem mais interessantes, vou adicionar alguns registros no banco de dados usando o código abaixo, mas se você preferir, insira os dados diretamente no SQL:

static void Main(string[] args)
        {
            var db = new Contexto();
            db.Cliente.Add(new Cliente() { Nome = "Carlos dos Santos" });
            db.Cliente.Add(new Cliente() { Nome = "Jose da Silva" });
            db.Cliente.Add(new Cliente() { Nome = "Antonio das Couves" });
            db.SaveChanges();
        }

Agora vamos começar a modificar a nossa classe e ver como realmente o migrations pode nos ajudar. Inicialmente vamos adicionar um campo chamado Ativo na classe Cliente, e logo após vamos criar um novo Migration para enviar isto ao banco de dados:

Classe Cliente com o novo campo:

public class Cliente
    {
        public int ID { get; set; }
        public string Nome { get; set; }
        public bool Ativo { get; set; }
    }

Agora ao executar o comando Add-Migrations “Cliente_Ativo” teremos mais um arquivo do Migrations:

public partial class Cliente_Ativo : DbMigration
    {
        public override void Up()
        {
            AddColumn("Clientes", "Ativo", c => c.Boolean(nullable: false));
        }

        public override void Down()
        {
            DropColumn("Clientes", "Ativo");
        }
    }

Mas antes de enviar isto para o banco, vamos imaginar que você queira setar um valor para o campo Ativo, por exemplo, todos os campos Ativos deverão estar true. Você pode fazer isto através do comando Sql() dentro do arquivo do migrations, veja:

public partial class Cliente_Ativo : DbMigration
    {
        public override void Up()
        {
            AddColumn("Clientes", "Ativo", c => c.Boolean(nullable: false));
            Sql("update clientes set ativo = 1");
        }

        public override void Down()
        {
            DropColumn("Clientes", "Ativo");
        }
    }

Obviamente você poderia ter definido isto como um valor default par o banco, mass o intuito aqui é lhe mostrar como é possível enviar comandos durante o processo do Migrations.

Agora vamos enviar o comando para o banco, mas de uma maneira um pouco diferente, vamos gerar um script SQL. Para isto execute o comando da seguinte maneira:

Update-DataBase –script

E o resultado será um arquivo de script SQL:

ALTER TABLE [Clientes] ADD [Ativo] [bit] NOT NULL DEFAULT 0
update clientes set ativo = 1
INSERT INTO [__MigrationHistory] ([MigrationId], [CreatedOn], [Model], [ProductVersion]) VALUES ('201207160033131_Cliente_Ativo', '2012-07-16T00:38:19.710Z', 0x1F8B0800000000000400CD56C96EDB3010BD17E83F083CB587988E0B0449202748ECB8085A3B4194E64E4B6387281755A40CFBDB7AE827F5173AD46E79C97AE84D2267797C7C33C3BFBFFFF8E74B29BC0524866BD527879D2EF140853AE26ADE27A99D1D1C93F3B38F1FFCAB482EBD87D2AEE7ECD053993E79B4363EA5D4848F2099E9481E26DAE899ED845A521669DAEB768FE9619702862018CBF3FCBB54592E21FBC1DF815621C4366562AC2310A658C79D208BEA4D980413B310FAE46A0932167ACCE709B308C610EF427086400210B317A2EA9E3854A4CA8719AF10995DDDAF62C8B2F6C9407050169A4668F60D566B0BB8749BE81812BBBA8359E17A3D241E5DF7A36DC7CAADE1E3B2E397B25F7AC49BA442B0A9C08519130688171F9D065627F01514200710DD326B21C16BB98E20435FB0701A1F3D8F8813DAED392228534ADB8CD60DE02D98132DA1041AD804E542BC115F42F41DD4DC3E5660C76C59AEE027F17E288EEA42279BA4D03C5CFEBF3FE985E50B5D66BDD45A00535B086A06F1697DA19BD78CC2B38C238DE55DE33F2CAD6E5D766E1C806D49C2AB63E7F2EB543BDB3054D96A7DD35CE06521D01D95E08F591C23C78DCA2856BC202F8BC141F072EDCB3C060DCD9612A8D0569950746C0EAD5D475A04239E183B64964D99BB814124B798EDE7B64CB3A7EAD6CAB3B477DFB9CF466BE8EC8852D337C2134934C90E0715969DF933DF206482255BEA76A0452AD5AEDADFE79D9753D33F5F797E84A2369A218AA5CD183E6D1DBFCD32DDA0B9D5C5DAB7B64FED6D932A7BA5FA96BAFD42694F0F830DE9E526C44372163C72B20B56C682EC38834EF04BE4F75A1B8C99E23330F65EFF0437D8B0325E3F50AA3E6A4C24FED3A9C2DDE99F9C1F7B7BEAFE69A0162C091F59F249B2E5E73775F829B7EFDCDDDB8DEACD6D3ED75B9F4453873AC7596C9A570F814DF9FBB4F962F28760F8BC0EE1DE4F0A42D7F2EAA0A5CDB59AE992643C5A135169D2BA8331581621431789E533165ADC0EC1986CC43F3091BA4E2BA7105DAB9BD4C6A9BD3006E454AC9AE7F5E9FEFCD9A45BC7ECDFC459D37E8F23204C8E47801B7599721155B8475B24B42384134B5121880A9F38186EBEAA224DB47A66A082BE21C4A05C7DDDBB2185C1CC8D0AD80276637B9AC375C6FC216738F96493C17CA5401230CCDC4881099A1E753EF7E0A7EEC57FF60FBDB90F33230C0000, '4.3.1')

Basta executar este arquivo dentro do SQL que o campo será criado e atualizado, ou se preferir, execute novamente o Update-DataBase que isto será feito automaticamente.
Este recurso do script pode ser util se você precisar atualizar também um ambiente e produção da sua aplicação.
image

Obs: A tabela __MigrationHistory é usada pelo Migrations para gerenciar o histórico das versões dentro do banco de dados.

Voltando o banco de dados em um determinado ponto:

Um recurso bem interessante do Migrations é que você pode voltar o seu banco de dados a qualquer ponto em que tenha executado um Add-Migrations. Imagine então que nós criamos o campo ativo no banco e agora você queira voltar ao ponto onde este campo ainda não existia, para isto vamos executar o seguinte comando do Migrations:

Update-DataBase –target “CriacaoBanco”

Isto volta nosso banco de dados a este ponto, que nosso caso foi a criação do banco, mas poderia ser qualquer outro ponto. Lembrando que este comando afeta apenas o banco de dados e não a nossa classe.

Agora vamos ver como é executar o Migrations de forma totalmente automatica.

Migrations – Executando as atualizações automaticamente

Agora que você já sabe como manter seu banco de dados atualizados, gerando versões das atualizações, vamos imaginar que você não precisa manter este histórico, mas simplesmente manter o banco atualizado.

Para este exemplo, vamos criar um projeto com os mesmos dados do exemplo anterior, ou seja: crie um projeto do tipo console:
image

Adicione o EF CodeFirst através do console do NuGet e depois adicione o contexto, a classe cliente e o arquivo app.config, mas neste arquivo iremos modificar o nome do bando de dados para ExemploMigrationsAutomatico:

public class Contexto : DbContext
    {
        public DbSet<Cliente> Cliente { get; set; }
    }

public class Cliente
    {
        public int ID { get; set; }
        public string Nome { get; set; }
    }
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <connectionStrings>
    <add name="Contexto" providerName="System.Data.SqlClient" connectionString="data source=(local); initial catalog=ExemploMigrationsAutomatico; integrated security=true;"/>
  </connectionStrings>
</configuration>

Feito isto vamos adicionar o migrations, da mesma forma que antes, mas agora modificando os parâmetros necessários para que tudo fique automático, então abra o console do NuGet e execute o comando Enable-Migrations:
image

Agora que começam as diferenças. No exemplo anterior não modificamos nada na classe configurations, mas neste caso iremos fazer alguns ajustes:
image

Primeiro vamos mudar a classe para “public class”, pois precisaremos refenciá-lá posteriormente. Depois vamos ativar a propriedade da migração automatica e por fim vamos marcar a opção que dados podem ser perdidos durante a migração. Esta última opção fica a seu critério, pois se você não habilitar a opção e o Migrations não conseguir atualizar o banco de dados. você receberá um erro.

E agora vamos modificar o construtor do contexto para ele chamar o DatabaseInitializer, que é quem faz todo o processo acontecer:

public class Contexto : DbContext
    {
        public DbSet<Cliente> Cliente { get; set; }

        public Contexto()
        {
            Database.SetInitializer(new MigrateDatabaseToLatestVersion<Contexto, Configuration>());
        }
    }

O que fizemos foi adicionar a chamada do DatabaseSetInitializer() com a opção MigrateDatabaseToLastVersion, o que faz com que nosso banco de dados seja sempre atualizado de acordo com as nossas classes.

Agora é só executar o exemplo abaixo para criarmos o banco de dados:

static void Main(string[] args)
        {
            var db = new Contexto();
            db.Cliente.Add(new Cliente() { Nome = "Carlos dos Santos" });
            db.Cliente.Add(new Cliente() { Nome = "Jose da Silva" });
            db.Cliente.Add(new Cliente() { Nome = "Antonio das Couves" });
            db.SaveChanges();
        }

Agora vamos modificar a classe cliente e simplesmente executar o programa novamente:

    public class Cliente
    {
        public int ID { get; set; }
        public string Nome { get; set; }
        public string CPF { get; set; }
        public decimal Limite { get; set; }
    }

Após executar o programa e fazer uma consulta no SQL:
image

Conclusão:

O recurso de Migrations sem dúvida é algo realmente fantástico no Entity Framework CodeFirst e certament ajuda na produtividade do nosso dia a dia. Escolha o que melhor lhe atender e começe a usar agora mesmo.

Abraços e até a próxima.
Carlos dos Santos.

Jun 21

Testes para Entrega Contínua com Visual Studio 2012 RC

Pessoal,

Recentemente eu participei do processo de revisão do material sobre Testes para Entrega Contínua com Visual Studio 2012 RC juntamente com o time de Patterns & Practices da Microsoft.

O material está muito interessante e vários exemplos. Se você trabalha com entrega contínua integrada ao processo de desenvolvimento, sem dúvida é um material essencial para você.

Para acessar o material acesse este link: http://msdn.microsoft.com/en-us/library/jj159344

Abraços,
Carlos dos Santos.