quarta-feira, 26 de abril de 2017

OneToOneEFCodeFirst

segunda-feira, 17 de abril de 2017

Como fazer migração no Asp.Net Core

Como fazer migração no Asp.Net Core

As migrações do Entity Framework para o ASP.NET Core são um pouco diferentes. Aqui estão os comandos básicos e uma solução alternativa para que as migrações do Entity Framework funcionem para um projeto do Class Libary.
Os comandos básicos

aqui estão os comandos básicos que você precisará para gravar migrações para o ASP.NET Core. Se você está vindo de DNX, não mudou muito.
Adicionar uma nova migração (Se for a primeira, ela irá adicionar a estrutura de pastas e as classes necessárias)
dotnet ef migrations add {NomeMigração}
Remova a migração mais recente.
dotnet ef migrations remove
Atualizar o banco de dados a versão mais recente (aplicar todas as migrações)
dotnet ef database update 

Bibliotecas de classe não são suportadas, ainda ...

Na primeira vez em que você tentar um desses comandos, você pode executar este erro:
Unrecognized option '-p'
Você está tentando executar suas migrações em uma biblioteca de classes? E eu também. Acontece que isso ainda não é suportado, então precisamos solucionar isso.

Altere sua biblioteca de classes em um aplicativo .NET Core

Parece simples quando você pensa sobre isso, mas há algumas gotchas. Aqui está a maneira mais simples de fornecer a ferramenta EF migrations com tudo o que ele precisa para ser executado.

1. Atualize seu Project.json

O primeiro passo é adicionar os bits necessários ao seu project.json. Você pode já ter alguns destes e aquele é aprovado, contanto que você terminar acima com tudo alistado abaixo. Eu usei o pacote Nuget para Microsoft Sql Server, mas você pode usar um diferente se você quiser.
"buildOptions": {
    "emitEntryPoint": true
},
"frameworks": {
    "netcoreapp1.0": {
        "imports": [ "portable-net451+win8" ]
    }
},
"dependencies": {
    "Microsoft.NETCore.App": {
        "version": "1.0.0-rc2-3002702",
        "type": "platform"
    },
    "Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview1-final",
    "Microsoft.EntityFrameworkCore.SqlServer": "1.0.0-rc2-final",
    "Microsoft.AspNetCore.Identity.EntityFrameworkCore": "1.0.0-rc2-final",
},
"tools": {
    "Microsoft.EntityFrameworkCore.Tools": {
        "version": "1.0.0-preview1-final",
        "imports": [
            "portable-net45+win8+dnxcore50",
            "portable-net45+win8"
        ]
    }
}

2. Crie um ponto de entrada vazio

Uma vez que estamos fingindo que esta biblioteca de classes é uma aplicação, precisamos adicionar um static void Main (). Adicione a seguinte classe ao projeto da biblioteca de classes.
public class Program
{
    public static void Main(string[] args)
    {
    }
}

3. Criar um DbContextFactory

Enganamos com êxito o Entity Framework para que funcione nesse ponto, mas o obstáculo final e mais tortuoso é ter certeza de que ele sabe como fazer girar o DbContext.
Você pode até ter executado este erro:
No parameterless constructor was found on 'TContext'. Either add a parameterless constructor to 'TContext' or add an implementation of 'IDbContextFactory<TContext>' in the same assembly as 'TContext'.
Normalmente, esta é uma tarefa para a classe Startup, mas como prefiro não instanciar um aplicativo da Web inteiro e sistema de injeção de dependência apenas para obter este trabalho, em vez disso, vamos criar uma pequena fábrica codificada.
Adicione a seguinte classe à biblioteca de classes:
public class TemporaryDbContextFactory : IDbContextFactory<PinchContext>
{
    public PinchContext Create()
    {
        var builder = new DbContextOptionsBuilder<PinchContext>();
        builder.UseSqlServer("Server=(localdb)\\mssqllocaldb;Database=pinchdb;Trusted_Connection=True;MultipleActiveResultSets=true");
        return new PinchContext(builder.Options);
    }
}
Algumas coisas a observar:
  • Minha classe DbContext é chamada PinchContext, certifique -se de colocar o seu próprio.
  • Não se preocupe em usar o sistema de configuração para obter sua seqüência de conexão. Isso é apenas temporário e apenas para o desenvolvimento, por isso apenas hardcode-lo. É uma dor para adicionar de qualquer maneira.
  • builderé o mesmo do AddDbContextseu em startup.cs. Se você tiver qualquer outra configuração, certifique-se de adicioná-lo aqui também.
É isso aí, executando migrações dotnet de sua pasta de biblioteca de classes deve agora funcionar conforme o esperado :)

Ajuda do bônus - mantem nomes da tabela de RC1

Se você está vindo de RC1, você também pode notar que RC2 usa o nome da propriedade DbSet em vez do nome da classe (Hooray! Esta é uma ótima notícia, como costumava ser desta forma para EF6 e eu prefiro muito). Isso pode causar alguns problemas para pessoas que já criaram suas tabelas a partir do RC1, então, para continuar usando seus antigos nomes de tabela singularizados do RC1, adicione esse snippet ao DbContext.
protected override void OnModelCreating(ModelBuilder builder)
{
    foreach (var entity in builder.Model.GetEntityTypes())
    {
        entity.Relational().TableName = entity.DisplayName();
    }

    base.OnModelCreating(builder);
}
Deixe-me saber se esse post te ajudou, por favor comente!

quinta-feira, 6 de abril de 2017

Aula 12 - Como usar o goto no c#


O comando goto é usado para forçar o programa a dar um salto até um rótulo ou para um especifico case da estrutura switch.
Aviso: O uso deste comando não é um boa prática! Por isso existe os loops ou estruturas cíclicas como while, do while e o for para o substituir.

Analíse como usamos o comando goto no programa abaixo:

public void Main()
        {
            int TotalCustoCafe = 0;

        Inicio:
            Console.WriteLine("Qual é o tamanho do café desejas?");
            Console.WriteLine("1 = Baixo; 2 = Médio; 3 = Longo");
            int tamanhoCafe = int.Parse(Console.ReadLine());

            switch (tamanhoCafe)
            {
                case 1:
                    TotalCustoCafe += 10;
                    break;
                case 2:
                    TotalCustoCafe += 20;
                    break;
                case 3:
                    TotalCustoCafe += 30;
                    break;
                default:
                    Console.WriteLine("O código {0} é inválido.", tamanhoCafe);
                    goto Inicio;
            }
        Pergunta:
            Console.WriteLine("Desejas continuar a compar? Sim ou Não?");
            string DecisaoCompra = Console.ReadLine();

            switch (DecisaoCompra.ToUpper())
            {
                case "SIM":
                    goto Inicio;
                case "NÃO":
                    break;
                default:
                    Console.WriteLine("A escolha {0} é inválida. Tenta novamente", DecisaoCompra);
                    goto Pergunta;
            }
            Console.WriteLine("O total do custo do café é {0} Kwanzas.", TotalCustoCafe);


            Console.ReadKey();
        }

Pesquisar neste blogue

Com tecnologia do Blogger.

Páginas