Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Criando um modelo

Fala ai professor na aula de como criar um banco de dados e muito bom porem eu queria ver como criar esse modela do zero sem copiar e colar. Poderia me ajuar? `

4 respostas
solução!

algum dia o professor vai responder eu creio!

Opa, tudo bom Felipe?

Então, não sou professor, mas gostaria de deixar minha opinião, talvez lhe ajude.

Bem, como sabemos, o Entity Framework (EF) surgiu para que a modelagem de banco de dados fosse facilmente implementada via aplicação. Ou seja, acredito que a direção que o curso de MVC com EF Core seja direcionado a utilização dessa ferramenta na aplicação.

Você pode aprender utilizar o EF6 e o EF Core pelo próprio site da Microsoft, através do link:

https://docs.microsoft.com/pt-br/ef/core/

Agora, caso esteja procurando como é que se criam as tabelas, campos e relacionamentos. Recomendo verificar a sessão de Infraestrutura nos cursos de bancos de dados.

Espero ter contribuído.

até mais.

Oi Filipe, tudo bem?

Então vamos lá: Considerando que cada entidade é descrita como abaixo:

  • Pedido: cada pedido tem uma coleção de itens e também dados cadastrais.
  • ItemPedido: cada item de pedido está associado a um pedido, representa um produto, possui um preço e a quantidade de itens.
  • Cadastro: Cada cadastro está vinculado a um único pedido, e contém informações do cliente, como nome, email, telefone e detalhes do endereço.
  • Produto: cada produto possui um código, nome e preço.

Com base nessas informações, dá pra montar uma classe para cada entidade.

  • Cada entidade terá um grupo de propriedades, sendo que os Ids são numéricos (tipo int, mas também poderia ser long).

  • Os valores do tipo moeda são declarados sempre com o tipo decimal, pois é um tipo numérico de ponto flutuante de maior precisão, e com representação decimal, o que evita problemas de arredondamento de dígitos decimais.

  • Como cada entidade tem uma propriedade chamada Id, o Entity Framework automaticamente pressupõe que essa propriedade é a chave primária da tabela gerada no processo "model-first".

  • Para evitar duplicação de código, movemos a propriedade Id para uma classe base abstrata, e fazemos com que cada entidade herde dessa classe.

  • Cada classe tem um construtor vazio e um outro construtor com os parâmetros mapeados para as propriedades. Isso facilita a inicialização dos objetos das classes.

  • Alguns campos (muitos, na verdade) possuem um atributo [Required], instruindo o Entity Framework a criar esses campos como "obrigatórios". Assim, esses campos não permitirão valores nulos, protegendo a integridade dos nossos dados.

  • Alguns campos são do tipo de alguma outra classe do modelo. Isso é feito para estabelecer um relacionamento entre as tabelas (e entidades) quando as tabelas forem geradas a partir do modelo:

public class Cadastro : BaseModel
{
...
    public virtual Pedido Pedido { get; set; }

public class ItemPedido : BaseModel
{   
...
    [Required]
    public Pedido Pedido { get; private set; }
    [Required]
    public Produto Produto { get; private set; }
...
public class Pedido : BaseModel
{
    [Required]
    public virtual Cadastro Cadastro { get; private set; }
}

[CONTINUA...]

[CONTINUAÇÃO...] Acho que é isso. O modelo é bastante simples, para não termos muita complicação na hora de desenvolver o app com ASP.NET Core e Entity Framework Core.

[DataContract]
public abstract class BaseModel
{
    [DataMember]
    public int Id { get; protected set; }
}

public class Produto : BaseModel
{
    public Produto()
    {

    }

    [Required]
    public string Codigo { get; private set; }
    [Required]
    public string Nome { get; private set; }
    [Required]
    public decimal Preco { get; private set; }

    public Produto(string codigo, string nome, decimal preco)
    {
        this.Codigo = codigo;
        this.Nome = nome;
        this.Preco = preco;
    }
}

public class Cadastro : BaseModel
{
    public Cadastro()
    {
    }

    public virtual Pedido Pedido { get; set; }
    [Required]
    public string Nome { get; set; } = "";
    [Required]
    public string Email { get; set; } = "";
    [Required]
    public string Telefone { get; set; } = "";
    [Required]
    public string Endereco { get; set; } = "";
    [Required]
    public string Complemento { get; set; } = "";
    [Required]
    public string Bairro { get; set; } = "";
    [Required]
    public string Municipio { get; set; } = "";
    [Required]
    public string UF { get; set; } = "";
    [Required]
    public string CEP { get; set; } = "";
}

public class ItemPedido : BaseModel
{   
    [Required]
    public Pedido Pedido { get; private set; }
    [Required]
    public Produto Produto { get; private set; }
    [Required]
    public int Quantidade { get; private set; }
    [Required]
    public decimal PrecoUnitario { get; private set; }

    public ItemPedido()
    {

    }

    public ItemPedido(Pedido pedido, Produto produto, int quantidade, decimal precoUnitario)
    {
        Pedido = pedido;
        Produto = produto;
        Quantidade = quantidade;
        PrecoUnitario = precoUnitario;
    }
}

public class Pedido : BaseModel
{
    public Pedido()
    {
        Cadastro = new Cadastro();
    }

    public Pedido(Cadastro cadastro)
    {
        Cadastro = cadastro;
    }

    public List<ItemPedido> Itens { get; private set; } = new List<ItemPedido>();
    [Required]
    public virtual Cadastro Cadastro { get; private set; }
}

Tudo começa com as ideias. Para criar um modelo do zero, comece descrevendo as especificações do seu domínio, isto é, que entidades e valores são necessários para o início do seu projeto. Adapte as ideias para modelar as classes. Crie uma migração inicial, como fizemos no curso, e depois vá incrementando o modelo e as migrações adicionais conforme seu projeto vai crescendo.

Você pode também assistir o curso do prof. Daniel Portugal da Alura, que explica bem melhor sobre a criação de modelos, tabelas e relacionamentos com o Entity Framework Core:

https://www.alura.com.br/curso-online-entity-framework-core

Qualquer dúvida, por favor me avise. Um abraço!