1
I would like to list a Restaurant, where items from this same restaurant have been saved inside the cart. When saving the product of the cart, it pulls with it the ID of the restaurant. Follow my controller that I made, but it did not work:
public ActionResult SelectRestaurante(int? id)
{
Carrinho carrinho = new Carrinho();
carrinho.produtos = db.Produtos.Find(id);
var restaurantes = db.Restaurantes.Include(r => r.Cozinha).Where(x => x.RestauranteID == carrinho.produtos.RestauranteID);
return View(restaurantes.ToList());
}
Classes:
public class Carrinho
{
[Key]
public int CarrinhoID { get; set; }
// FKs;
[Required(ErrorMessage = "Cliente")]
[DisplayName("Cliente ID")]
public int ClienteID { get; set; }
public virtual Cliente cliente { get; set; }
[Required(ErrorMessage = "Produto")]
[DisplayName("ProdutoID")]
public int ProdutoID { get; set; }
public virtual Produto produtos { get; set; }
}
public class Produto
{
[Key]
public int ProdutoID { get; set; }
[Required(ErrorMessage = "Preencha o nome do produto")]
[DisplayName("Produto")]
[StringLength(20, MinimumLength = 5, ErrorMessage = "O nome do produto deve ter entre 5 a 20 caracteres")]
public string Nome { get; set; }
[Required(ErrorMessage = "Preencha a descrição do produto")]
[DisplayName("Descrição")]
[StringLength(50, MinimumLength = 5, ErrorMessage = "O nome do produto deve ter entre 5 a 50 caracteres")]
public string Descricao { get; set; }
[DisplayName("Foto")]
public string Foto { get; set; }
[Required(ErrorMessage = "Preencha o valor do produto")]
[DisplayName("Valor R$")]
public decimal Valor { get; set; }
//relacionamentos
public int RestauranteID { get; set; }
public virtual Restaurante Restaurante { get; set; }
public virtual ICollection<Carrinho> Carrinhos { get; set; }
}
public abstract class Restaurante
{
[Key]
public int RestauranteID { get; set; }
[Required(ErrorMessage = "Preencha o nome do Restaurante")]
[DisplayName("Restaurante")]
[StringLength(50, MinimumLength = 3, ErrorMessage = "O nome do restaurante deve ter entre 5 e 50 caracteres.")]
public string Nome { get; set; }
[Required(ErrorMessage = "Preencha o tipo de cozinha")]
[DisplayName("Cozinha")]
public int CozinhaID { get; set; }
public virtual Cozinha Cozinha { get; set; }
[Required(ErrorMessage = "Preencha o telefone")]
[DisplayName("Telefone")]
[StringLength(12, MinimumLength = 10, ErrorMessage = "O número de telefone deve haver 12 caracteres.")]
public string Telefone { get; set; }
[Required(ErrorMessage = "Preencha o CNPJ")]
[DisplayName("Cnpj")]
[StringLength(18, MinimumLength = 18, ErrorMessage = "O CNPJ deve haver no máximo, 18 caracteres.")]
public string Cnpj { get; set; }
[Required(ErrorMessage = "Preencha o CEP")]
[DisplayName("CEP")]
[StringLength(9, MinimumLength = 8, ErrorMessage = "O CEP deve haver no máximo 9 caracteres.")]
public string Cep { get; set; }
[Required(ErrorMessage = "Preencha a Cidade")]
[DisplayName("Cidade")]
[StringLength(50, MinimumLength = 5, ErrorMessage = "A cidade deve ter entre 5 e 50 caracteres.")]
public string Cidade { get; set; }
[Required(ErrorMessage = "Preencha o Estado")]
[DisplayName("Estado")]
[StringLength(2, MinimumLength = 2, ErrorMessage = "A sigla do estado deve haver 2 caracteres.")]
public string Estado { get; set; }
[Required(ErrorMessage = "Preencha o Bairro")]
[DisplayName("Bairro")]
[StringLength(50, MinimumLength = 5, ErrorMessage = "O bairro deve ter entre 5 e 50 caracteres.")]
public string Bairro { get; set; }
[Required(ErrorMessage = "Preencha a Rua")]
[DisplayName("Rua")]
[StringLength(50, MinimumLength = 5, ErrorMessage = "A rua deve ter entre 5 e 50 caracteres.")]
public string Rua { get; set; }
[Required(ErrorMessage = "Preencha a número do estabelecimento")]
[DisplayName("Número")]
public int NumRua { get; set; }
[Required(ErrorMessage = "Preencha o nome do responsável pelo estabelecimento")]
[DisplayName("Nome")]
[StringLength(50, MinimumLength = 3, ErrorMessage = "O nome do responsável deve ter entre 5 e 50 caracteres.")]
public string NomeResp { get; set; }
[Required(ErrorMessage = "Preencha o sobrenome do responsável pelo estabelecimento")]
[DisplayName("Sobrenome")]
[StringLength(50, MinimumLength = 3, ErrorMessage = "O sobrenome do responsável deve ter entre 5 e 50 caracteres.")]
public string SobrenomeResp { get; set; }
[Required(ErrorMessage = "Preencha o Email")]
[DisplayName("Email")]
[DataType(DataType.EmailAddress)]
[EmailAddress(ErrorMessage = "E-mail inválido")]
[StringLength(255, MinimumLength = 3, ErrorMessage = "O email deve ter entre 3 e 255 caracteres.")]
public string Email { get; set; }
[Required(ErrorMessage = "Preencha o Celular")]
[DisplayName("Telefone")]
[StringLength(15, MinimumLength = 10, ErrorMessage = "O número de celular deve haver entre 10 e 15 caracteres.")]
public string Celular { get; set; }
[Required(ErrorMessage = "Preencha a senha")]
[DisplayName("Senha")]
[StringLength(50, MinimumLength = 3, ErrorMessage = "A senha deve ter entre 3 e 50 caracteres.")]
[DataType(DataType.Password)]
public string Senha { get; set; }
[Required(ErrorMessage = "Preencha a senha")]
[DataType(DataType.Password)]
[DisplayName("Confirmar Senha")]
[Compare("Senha", ErrorMessage = "A senha e a confirmação de senha estão diferentes!")]
public string ConfirmarSenha { get; set; }
[DisplayName("Foto")]
public string Foto { get; set; }
public virtual ICollection<Produto> Produtos { get; set; }
}
Please enter the class code also :D
– Ícaro Dantas
Tá ai! Added Cart and Product. = D
– Allan Fernandes
The restaurant class has a Icollection<Product>? It would be good to post the code of the class Restaurant tbm.
– Leandro Simões
Yes, she does. I said that upstairs. I’ll put.
– Allan Fernandes
You didn’t describe the problem! What’s wrong? What result did you expect?
– Genos
It’s written up there, man... I want the restaurant(s) to show up, to have the ID on the product, which is already saved in the database. Just read the code to know.
– Allan Fernandes
Your relationships are wrong, are 1 to 1 the right would be N to M. The way it is, a cart can only have one product, a product can only exist in 1 restaurant, if it exists in 2 will be 2 different products.... fix it first! And to get the restaurant from Carrinho, just do Carrinho.productos.Restaurante the way it is today
– Guilherme Branco Stracini