07 – Criando um aplicação completa em Asp.Net/MVC 4 e ExtJS 4 – Criação do edmx na camada de Domínio


Olá para todos.

Agora que já temos nossas camadas já criadas e nosso script executado no banco, iremos importar estas tabelas para formar as nossas classes na nossa aplicação, pois neste modelo que estou seguindo, não irei utilizar a técnica de Code First, que seria criar as classes manualmente.

Let’s go Bob.

– Vá em View > Other Windows > Package Manager Console e no gerenciador que se abrirá na parte inferior do Visual Studio, selecione GPA.Infra em Default Project e instale o Entity Framework com o comando:

Install-Package EntityFramework

– Em GPA.Infra, clicar com o botão direito em References > Solution e adicionar GPA.Dominio(Aproveite referencie também as Camadas de Infra e Domínio à Camada de Aplicação).

– Em GPA.Infra, clicar com o botão direito e siga em Add > New Item > Data > ADO.NET Entity Data Model com o nome de de GPA.edmx e clicamos em Add.

– Em seguida, escolheremos a opção Generate from database.

Vou deixar uma observação aqui a respeito de tabelas que são entidades fracas contidas em seu banco de dados. Após criar um modelo de banco de dados contendo uma entidade fraca que continha 2 chaves estrangeiras, tive que incluir uma chave primária nesta tabela porque o mapeamento do edmx jogou um erro dizendo que eu não poderia mapear algo sem chave primária. Em razão disso, tive de reescrever alguns pontos no tutorial que trata de modelo lógico.

Warning 2 Error 6002: The table/view ‘GPA.dbo.GPA_Modalidade_Usuario’ does not have a primary key defined. The key has been inferred and the definition was created as a read-only table/view. C:\sistemas\dotnet\gpa\GPA\GPA.Infra\GPA.edmx 1 1 GPA.Infra

– Logo após a criação do seu edmx, clique na parte branca do mapeamento(ou pressione F4) e em Code Generation(no lado inferior direito), marque a opção Code Generation como none para que não seja gerado código automático. Em seguir, salve as alterações.

– Em seguida, clique com o botão direito na parte branca e no menu que segue Add Code Generation Item > Code > EF 5.x DbContext Generator e defina-o como GPA.tt. Não ligue para as possíveis caixas de diálogo que podem vir a aparecer. Em seguida, salve novamente e feche o edmx.

– Arraste o seu GPA.tt para o seu projeto de Domínio(GPA.Dominio), pois ele contém suas classes que foram geradas a partir do banco.

– Em seguida, dê 2 cliques em GPA.tt e na linha onde encontra-se

const string inputFile = @”GPA.edmx”;

Troque para

const string inputFile = @”../GPA.Infra/GPA.edmx”;

Já que trocamos de lugar o nosso “tt”, temos de referenciá-lo novamente. Não se esqueça de salvar.

– Altere também em GPA.Context.tt dando 2 cliques dentro de GPA.Infra, onde encontra-se:

using System.Data.Objects;

using System.Data.Objects.DataClasses;

using System.Linq;

Acrescente

using System.Data.Objects;

using System.Data.Objects.DataClasses;

using System.Linq;

using GPA.Dominio;

10º – Apague o GPA.tt contido no GPA.Infra;

11º – Abra o arquivo GPA.Context.cs contido em GPA.Context.tt e adicione a referência de GPA.Dominio.

using System;

using System.Data.Entity;

using System.Data.Entity.Infrastructure;

using GPA.Dominio;

12º – Em seu arquivo app.config dentro de sua camada de infra(GPA.Infra) há uma seção tratando sobre connection string, que é responsável por informar os dados corretos de conexão com seu banco de dados. Se for a primeira vez em que você está conectando no seu banco, abra o arquivo e confira se ela está lá.

<connectionStrings>

<add name=”DefaultConnection” connectionString=”Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\aspnet.mdf;Integrated Security=True;User Instance=True;MultipleActiveResultSets=True” providerName=”System.Data.SqlClient” />

</connectionStrings>

Criando o Contexto de sua aplicação e seus Repositórios

Dentro da camada de Infra(GPA.Infra), iremos criar um arquivo chamado Contexto.cs para as nossas classes. Este arquivo faz o intermédio entre o banco de dados e a aplicação, utilizando o Entity Framework, que é um framework responsável por abstrair a nossa camada de conexão com banco.

Um pouco sobre o Entity Framework 5

– Com o botão direito em cima da camada de Infra, criaremos o nosso Contexto, Add > Class > Contexto.cs e inserir o conteúdo abaixo(aconselho ler o arquivo e tentar fazê-lo na unha, pois o Visual Studio tem muitos problemas com dependências, por isso, Ctrl + C e Ctrl + V talvez não seja uma idéia tão boa), claro, com as devidas referências.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using GPA.Dominio;
using System.Data.Entity;

namespace GPA.Infra
{
public class Contexto : DbContext
{
public DbSet<GPA_Anexo> Anexo { get; set; }

public DbSet<GPA_Modalidade> Modalidade {get; set; }

public DbSet<GPA_Modalidade_Usuario> Modalidade_Usuario {get; set; }

public DbSet<GPA_Resposta> Resposta {get; set; }

public DbSet<GPA_Solicitacao> Solicitacao {get; set; }

public DbSet<GPA_Status> Status {get; set; }

public DbSet<GPA_Tipo_Usuario> TipoUsuario {get; set; }

public DbSet<GPA_Usuario> Usuario {get; set; }
}

}

– Agora, para cada classe, criaremos os repositórios. Enquanto no padrão MVC, utilizamos a camada Model para também declarar o métodos de nossa classe, aqui utilizaremos a camada de Infra, que por sua vez, implementa os métodos em conjunto com a camada de Domínio(GPA.Dominio).

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using GPA.Dominio;
namespace GPA.Infra
{
public class RepositorioDeUsuario
{

/*Já de cara, instanciaremos o nosso Contexto
* para colocarmos em ação a camada responsável
* pela nossa conexão.
*/

public GPAEntities Contexto { get; set; }

//Aqui abaixo, nosso método construtor
public RepositorioDeUsuario() {

//Inicializamos o nosso Contexto
this.Contexto = new GPAEntities();

/*Aqui, o proxy deve estar desabilitado para
* evitar referência circular
*/
Contexto.Configuration.ProxyCreationEnabled = false;
}

public List<GPA_Usuario> ObterTodosOsUsuarios() {
return this.Contexto.GPA_Usuario.ToList();
}

public void InserirUsuario(GPA_Usuario usuario) {
this.Contexto.GPA_Usuario.Add(usuario);
this.Contexto.SaveChanges();
}

public int BuscarQuantidadeRegistros() {
return this.Contexto.GPA_Usuario.Count();
}

public GPA_Usuario ObterUsuarioPorId(int id) {
return this.Contexto.GPA_Usuario.Find(id);
}
public void RemoverUsuario(GPA_Usuario usuario) {
this.Contexto.GPA_Usuario.Remove(usuario);
this.Contexto.SaveChanges();
}

}

}

Referência Circular

Vale ressaltar que quando mapeamos nosso modelo na camada de Domínio, existem relacionamentos(1:N, N:N, 1:1) trazidos do banco de dados e replicados nas classes que podem gerar um referência circular, por isso utilizamos a opção abaixo marcada como false para corrigirmos este pequeno problema na implementação de nosso sistema.

Contexto.Configuration.ProxyCreationEnabled = false;

É isso aí então pessoal. Fiquem sabendo que provavelmente eu irei atualizar os conteúdos porque muitos estavam em rascunhos quase prontos há mais de um ano, portanto estejam preparados que este conteúdo é passível de revisão. Se tiverem dúvidas, postem aí.

fonte: https://mastigado.wordpress.com

Post Anterior: https://mastigado.wordpress.com/2014/11/25/06-execucao-do-script-de-criacao-de-tabelas-e-seus-relacionamentos-no-sql-server/

Sobre Mastigado
Sou um daqueles que precisa mudar o mundo.

8 Responses to 07 – Criando um aplicação completa em Asp.Net/MVC 4 e ExtJS 4 – Criação do edmx na camada de Domínio

  1. Cláudio Cirne disse:

    Quando vocês vão postar a continuação desse projeto? Se existe a parte 8 não estou encontrando…
    Continue por favor.

    Curtir

    • Mastigado disse:

      Meu caro. Eu comecei a repensar sobre o ExtJS depois da mudança de licença que a Sencha fez, mas se seu problema for de algum CRUD, eu mando um tutorial para você.
      Talvez eu transforme este tutorial em outra coisa.

      Curtir

      • Fabricio disse:

        Pode me mandar? rmoura.fabricio@gmail.com

        Curtir

      • Mastigado disse:

        O que você precisa?

        Curtir

      • Fabricio disse:

        Voce tem este tutorial completo? Estou iniciando agora e precisava de um do inicio ao fim, para ter uma base.

        Curtir

      • Mastigado disse:

        Pois é meu caro, a pergunta que te faço agora é se você realmente tá afim de investir em ExtJS mesmo depois de a Sencha ter tornado inviável a licença do app para usuário comum?
        Olha, eu acho o ExtJS um puta framework e dificilmente alguém fará o que ele faz, mas estou disposto a alterar este tutorial de forma drástica.
        Você está programando em qual versão do ExtJS? A 6? Porque se for, eu não sei o quanto este tutorial irá te ajudar assim. Um outro detalhe é que dei uma freada neste tutorial porque eu comecei achar estranho a movimentação da biblioteca Ext.Net demorando para fazer atualização, criando novas bibliotecas e aumentando os preços drasticamente, pois no fim percebi que a culpa principal era da Sencha.
        Melhor, você consegue dizer claramente em que você está iniciando?

        Curtir

  2. Valter disse:

    Muito bom este teu tutorial, parabéns, estou fazendo uma aplicação completa em Asp.Net /Mvc4 e gostaria de saber se você tem um tutorial sobre CRUD, estou começando em C# Asp.Net/Mvc4 neste semestre e acho que meu professor não aceitaria que fizesse com este framework.

    Curtir

    • Mastigado disse:

      Olá Valter, muito obrigado pelo elogio.

      Vamos lá.

      Você deve ter percebido que parei o tutorial no meio e não era o que eu gostaria de ter feito porque nem cheguei na parte de ExtJS que era onde eu ia começar o CRUD. Eu até fiz o CRUD funcionar em AspNet MVC 4 com ExtJS lá no meu serviço, só que depois de a Sencha ter deixado a licença do framework bem restritiva e (muito, muito) mais cara, somei ao tamanho da curva de aprendizado que é grande e decidi que este tutorial irá ser refeito. Provavelmente irei utilizar Bootstrap e Angular talvez para terminá-lo. Peço um pouco de paciência, pois estou com muitos projetos em andamento. Acabo de criar um Github para o blog e devo postar novos códigos. Assim que puder deixarei essa documentação mais rica.

      Curtir

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: