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

Build Failed - relacionando tabelas

Boa Tarde, fiz o passo a passo do curso e para reforça o aprendizado iniciei uma novo projeto. quando vou realizar o add-migration ele retorna build failed.

classe maquina

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace Computador.Models
{
    public class Maquina
    {
        public Maquina()
        {
        }

        public Maquina(string id, string chave, Setor setor, string marca)
        {
            Id = id;
            Chave = chave;
            Setor = setor;
            Marca = marca;
        }

        public string Id { get; set; }

        public string Chave { get; set; }

        public Setor Setor { get; set; }

        public string Marca { get; set; }



    }

}

classe setor

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace Computador.Models
{
    public class Setor
    {
        public Setor()
        {
        }

        public Setor(int id, string nome, List<Maquina> maquinas)
        {
            Id = id;
            Nome = nome;
            Maquinas = maquinas;
        }

        public int Id { get; set; }

        public string Nome { get; set; }

        public List<Maquina> Maquinas { get; private set; } = new List<Maquina>();
    }
}

ApplicationContext.cs

using Computador.Models;
using JetBrains.Annotations;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace Computador
{
    public class ApplicationContext :DbContext
    {
        public ApplicationContext( DbContextOptions options) : base(options)
        {
        }

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

            modelBuilder.Entity<Setor>().HasKey(t => t.Id);
            modelBuilder.Entity<Setor>().HasMany(t => t.Maquinas).WithOne(dt => dt.Setor);

            modelBuilder.Entity<Maquina>().HasKey(t => t.Id);
            modelBuilder.Entity<Maquina>().HasOne(t => t.Setor);

        }

        public DbSet<Maquina> Maquina { get; set; }
        public DbSet<Setor> Setor { get; set; }

    }
}

essas são as classe que to usando para fazer a migração para o banco

3 respostas

Olá Thiago!

Pelo que estava observando no seu código, a classe Maquina tem um campo do tipo Setor e a classe Setor tem um campo do tipo Maquina.

Com isso, para você ter um objeto do tipo Maquina, você deve ter informações de um objeto do tipo Setor, e este objeto tem que ter informações de um objeto do tipo Maquina e assim por diante. Isso é chamado de referência circular.

Acredito que para resolver este problema, você deve escolher se Maquina tem um objeto do tipo Setor ou se Setor tem um objeto do tipo Maquina. E eliminar o campo que está "sobrando".

Espero ter ajudado!

é que eu me baseei nesse trecho de código. tem ambas as classe tem essa referencia circular

    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; }
}

ai agora fiquei sem entender, pode ajudar por favor?

solução!

Conseguir resolver mudando alguns parâmetros do meu controller