5
respostas

Erro no Relacionamento

Olá professos! Não entendi o seguinte erro ao executar o comando "Add-Migration Cliente": Não é possível determinar o relacionamento representado pela propriedade de navegação 'Produto.Promocoes' do tipo 'IList '. Configure manualmente o relacionamento ou ignore essa propriedade do modelo.

5 respostas

Olá Fagner, Se a sua classe produto tem várias promoções na classe produto terá uma lista de promoções e na classe promoção você terá um objeto de produto. Assim:

Public class Produto {
    IList <Promocao> PromocaoList;
}

public class Promocao  {
    Produto produto;
}

Esse código representa um relacionamento um-para-muitos, onde um produto tem várias promoções e uma promoção é de um produto.

O Migration vai considerar essa multiplicidade e irá gerar as tabelas com base nisso.

Esse foi os códigos usados na aula: public class Promocao { public int Id { get; internal set; } public string Descricao { get; internal set; } public DateTime DataInicio { get; internal set; } public DateTime DataTermino { get; internal set; } public IList Produtos { get; internal set; }

    public Promocao()
    {
        this.Produtos = new List<PromocaoProduto>();
    }

    public void IncluirProduto(Produto produto)
    {
        this.Produtos.Add(new PromocaoProduto() { Produto = produto });
    }
}

public class Produto { public int Id { get; internal set; } public string Nome { get; internal set; } public string Categoria { get; internal set; } public double PrecoUnitario { get; internal set; } public string Unidade { get; internal set; } public IList Promocoes { get; set; }

public class PromocaoProduto { public int ProdutoId { get; set; } public Produto Produto { get; set; } public int PromocaoId { get; set; } public Produto Promocao { get; set; } }

insira seu código aqui

O relacionamento aqui é Muitos-Para-Muitos. Já revisei o código várias vezes e está igual ao da aula.

Agora entendi que é muitos para muitos. Mas analisando teu código eu suspeito de um equivoco.

Em um relacionamnto many-to-many eu teria lista dos dois lados. Mas vi que você tem a classe PromocaoProduto. Sendo assim, você teria o relacionamento, tanto de promoção quanto de produto com essa classe.

Então, nas classes produto e Promocao você teria uma lista de PromocaoProduto. Assim:

public class Promocao {  
    public int PromocaoId { get; internal set; } 
    public string Descricao { get; internal set; } 
    public DateTime DataInicio { get; internal set; } 
    public DateTime DataTermino { get; internal set; } 
    public IList<PromocaoProduto> promocoesProduto { get; internal set; }
}

public class Produto { 
    public int ProdutoId { get; internal set; } 
    public string Nome { get; internal set; }  
    public string Categoria { get; internal set; } 
    public double PrecoUnitario { get; internal set; } 
    public string Unidade { get; internal set; } 
    public IList<PromocaoProduto> promocoesProduto { get; internal set; }
}

public class PromocaoProduto { 
    public int ProdutoId { get; set; } 
    public Produto Produto { get; set; } 
    public int PromocaoId { get; set; } 
    public Promocao Promocao { get; set; } 
}

Veja que na classe PromocaoProduto ele tem os objetos e em nas classes Produto e Promocao tem a lista de PromocaoProduto.

Existe uma outra possibiliade que seria sem a classe PromocaoProduto. Mas de acordo com teu código, não seria aplicável.

E aí Fagner, informa para gente se deu certo.