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

Dificuldade na Migração

Olá, Estou com problemas logo no início, rsrs. Alguem pode me ajudar, por favor?

Não consegui fazer a migração, a migration gerada está vazia:

namespace CasaDoCodigo.Migrations
{
    public partial class Categoria : Migration
    {
        protected override void Up(MigrationBuilder migrationBuilder)
        {

        }

        protected override void Down(MigrationBuilder migrationBuilder)
        {

        }
    }
}

Não entendo, acredito ter inserido corretamente a classe Categoria no arquivo modelo.cs:

    public class Categoria : BaseModel
    {
        public Categoria(string nome)
        {
            Nome = nome;
        }

        [Required]
        public string Nome { get; private 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; }
        [Required]
        public Categoria Categoria { get; private set; }

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

Na classe applicationContext, inseri os relecionamentos:

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);

            modelBuilder.Entity<Produto>().HasKey(t => t.Id);
            modelBuilder.Entity<Produto>().HasOne(t => t.Categoria);

            modelBuilder.Entity<Pedido>().HasKey(t => t.Id);
            modelBuilder.Entity<Pedido>().HasMany(t => t.Itens).WithOne(t => t.Pedido);
            modelBuilder.Entity<Pedido>().HasOne(t => t.Cadastro).WithOne(t => t.Pedido).IsRequired();

            modelBuilder.Entity<ItemPedido>().HasKey(t => t.Id);
            modelBuilder.Entity<ItemPedido>().HasOne(t => t.Pedido);
            modelBuilder.Entity<ItemPedido>().HasOne(t => t.Produto);

            modelBuilder.Entity<Cadastro>().HasKey(t => t.Id);
            modelBuilder.Entity<Cadastro>().HasOne(t => t.Pedido);

            modelBuilder.Entity<Categoria>().HasKey(t => t.Id);
        }
    }

Estou gerado a migração com o comando "Add-Migration Categoria". Por que está sendo gerada vazia?

3 respostas

Olá Djeison, faltou criar os relacionamentos entre as classes de Categoria e Produto. Acredito que tenha que fazer as seguintes alterações em seu código:

Na classe Produto, adicionar a propriedade do tipo Categoria com o modificador virtual:

[Required]
 public virtual Categoria Categoria {get;set;}

Em sua classe de Contexto, no parâmetro modelBuilder, alterar o seguinte trecho:

 modelBuilder.Entity<Produto>().HasOne(t => t.Categoria);

Limpe seu projeto e tente adicionar a migração novamente.

Esse foi o jeito que fiz e ainda estou testando para ver se está tudo certo mesmo. Qualquer coisa reedito por aqui.

Abraços!

Essas coisas que vc falou eu fiz, estão descritas no post da dúvida. Mas não está funcionando, não entendo...

Fiz também uma tentativa ja criando o Repository:

    public interface ICategoriaRepository
    {


    }

    public class CategoriaRepository : BaseRepository<Categoria>, ICategoriaRepository
    {
        public CategoriaRepository(ApplicationContext contexto) : base(contexto)
        {
        }

    }

... e continua sendo criada vazia a Migration... Alguém sabe o que pode estar acontendo?

solução!

Consegui resolver o problema... Fiz duas coisas e agora não sei qual delas que resolveu, rsrs

1: A declaração :

modelBuilder.Entity<Categoria>().HasKey(t => t.Id);

Estava escrita depois do relacionamento com a tabela:

modelBuilder.Entity<Produto>().HasKey(t => t.Id);
modelBuilder.Entity<Produto>().HasOne(t => t.Categoria);

Coloquei o identificador da PK primeiro. E...

2: A classe BaseModel estava como abstract, retirei esse modificaror.

Acredito que o a primeira ação é que fez mais sentido para resolver...

obrigado.