1
resposta

Relacionamentos e Migrações

using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Runtime.Serialization; using System.Threading.Tasks;

namespace CasaDoCodigo.Models { [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; }
}

}

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

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

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

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

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

    }

public Context(DbContextOptions options): base(options) { // Database.EnsureCreated(); }

Fiz esatamente a mesma coisa que o instrutor faz no curso mas o meu da esse erro, quando eu faso o comando Add-Migration Inicial "Nome da migration (Inicial)"

The child/dependent side could not be determined for the one-to-one relationship between 'Pedidos.Cadastro' and 'Cadastros.Pedido'. To identify the child/dependent side of the relationship, configure the foreign key property. If these navigations should not be part of the same relationship configure them without specifying the inverse. See http://go.microsoft.com/fwlink/?LinkId=724062 for more details.

1 resposta

Tenho o mesmo problema, alguem poderia nos ajudar?