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.