Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se
Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Erro na hora de gerar a Migration

Fiz de acordo com o que o professor ensina mas está dando este erro quando vou gerar a Migration.

The child/dependent side could not be determined for the one-to-one relationship that was detected between 'Endereco.Cliente' and 'Cliente.EnderecoDeEntrega'. To identify the child/dependent side of the relationship, configure the foreign key property. See http://go.microsoft.com/fwlink/?LinkId=724062 for more details.

Aqui estão os códigos referentes ao problema.

public class Endereco
    {
        public int Numero { get; set; }
        public string Logradouro { get; set; }
        public string Complemento { get; set; }
        public string Bairro { get; set; }
        public string Cidade { get; set; }
        public Cliente Cliente { get; set; }
    }

public class Cliente
    {
        public int Id { get; set; }
        public string Nome { get; internal set; }
        public Endereco EnderecoDeEntrega { get; set; }
    }

public class LojaContext : DbContext
    {
        public DbSet<Produto> Produtos { get; set; }
        public DbSet<Compra> Compras { get; set; }
        public DbSet<Promocao> Promocoes { get; set; }
        public DbSet<Cliente> Clientes { get; set; }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<PromocaoProduto>().HasKey(pp => new { pp.PromocaoId, pp.ProdutoId});
            modelBuilder.Entity<Endereco>().ToTable("Enderecos");
            modelBuilder.Entity<Endereco>().Property<int>("ClientId");
            modelBuilder.Entity<Endereco>().HasKey("ClientId");
        }
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseSqlServer("Server=(localdb)\\mssqllocaldb;Database=LojaDB;Trusted_Connection=true;");
        }
    }

Como resolve isso?

1 resposta
solução!

Dei uma pesquisada na internet e encontrei uma solução no site da Microsoft que dizia que eu tinha que configurar manualmente a relação de dependência no OnModelCreating() dessa forma:

protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<PromocaoProduto>().HasKey(pp => new { pp.PromocaoId, pp.ProdutoId });
            modelBuilder.Entity<Endereco>().ToTable("Enderecos");
            modelBuilder.Entity<Endereco>().Property<int>("ClientId");
            modelBuilder.Entity<Endereco>().HasKey("ClientId");
            modelBuilder.Entity<Cliente>().HasOne(e => e.EnderecoDeEntrega).WithOne(c => c.Cliente).HasForeignKey<Endereco>("ClientId");
        }

A questão é que na vídeo-aula o EF do professor consegue identificar sozinho a relação de dependência e no meu caso tive que configurar manualmente.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software