0

Je suis la construction d'une boutique en ligne à l'aide de code MVC premierBoutique en ligne - Créer une commande avec plusieurs produits MVC .net

donc j'ai créé cette classe de modèle pour l'instant (ne prenez pas les types des attributs trop sérieux pour l'instant):

Produits (Produto):

public Produto() 
     { 
      ListaProdutoEncomenda = new HashSet<Produto_Encomenda>(); 
     } 
     public int ProdutoID { get; set; } 

     [Required] 
     [StringLength(50)] 
     public string Nome { get; set; } 

     [Required] 
     public double Preco { get; set; } 

     [Required] 
     public double Peso { get; set; } 

     [Required] 
     [StringLength(255)] 
     public string Descricao { get; set; } 

     [Required] 
     public double IVA { get; set; } 

     public string Imagem { get; set; } 

     public DateTime UltimaAtualizacao { get; set; } 

     public int Stock { get; set; } 

     public int CategoriaID {get;set;} 

     public virtual ICollection<Produto_Encomenda> ListaProdutoEncomenda { get; set; } 
    } 

Encomenda (ordre):

public class Encomenda 
{ 
    public Encomenda() 
    { 
     ListaProdutoEncomenda = new HashSet<Produto_Encomenda>(); 
    } 
    [Key] 
    public int IDEncomenda { get; set; } 

    [Required] 
    public DateTime DataSubmissao { get; set; } 

    [Required] 
    public DateTime DataEnvio { get; set; } 

    [Required] 
    public int EstadoEnvioID { get; set; } 

    [StringLength(50)] 
    public string NomeDestino { get; set; } 

    [Required] 
    public int TipoExpedicaoID { get; set; } 

    [Required] 
    public int RegiaoDestinoID { get; set; } 

    [StringLength(50)] 
    public string MoradaDestino { get; set; } 

    [StringLength(50)] 
    public string CodPostalDestino { get; set; } 

    [Required] 
    [StringLength(50)] 
    public string MoradaFaturacao { get; set; } 

    [Required] 
    [StringLength(50)] 
    public string CodPostalFaturacao { get; set; } 

    public virtual ICollection<Produto_Encomenda> ListaProdutoEncomenda { get; set; } 

} 

Et la table de connexion entre les Produtos (Produits) et Encomenda (commande)

public class Produto_Encomenda 
    { 

     [Key] 
     public int IDProduto_Encomenda { get; set; } 

     [Required] 
     public string NomeProduto { get; set; } 

     [Required] 
     public int Quantidade { get; set; } 

     [Required] 
     public float preco { get; set; } 

     [Required] 
     public float IVA { get; set; } 


     public virtual Encomenda Encomenda { get; set; } 

     public virtual Produto Produto { get; set; } 


     [ForeignKey("Encomenda")] 
     public int IDEncomendaFK { get; set; } 

     [ForeignKey("Produto")] 
     public int IDProdutoFK { get; set; } 

    } 

Ma question est .. Admettons qu'un costumer achète 2 ou 3 produits ou plus. Comment puis-je stocker tous ces produits sur une seule ligne d'une commande? Bravo et merci beaucoup pour le temps passé à lire.

Répondre

1

Je ne suis pas sûr de ce que vous entendez par "une seule ligne d'une commande". Chaque produit est un élément de campagne distinct et vos entités le modélisent déjà via la relation plusieurs-à-plusieurs.

Cependant, en général cette configuration est une très mauvaise idée. Votre commande ne doit pas être directement liée aux produits. Au lieu de cela, votre commande devrait simplement avoir un article de commande, et vous allez créer ces articles de commande en fonction des produits qui ont été vendus. La raison en est que les produits sont très susceptibles de changer. Si un produit est retiré parce qu'il n'est plus disponible, par exemple, cela n'annule pas le fait qu'il a déjà été vendu dans une commande. Cependant, pour que l'intégrité référentielle soit maintenue, toutes les commandes vendues avec ce produit devraient également avoir leur relation avec ce produit supprimée. En ayant une entité entièrement séparée, c'est-à-dire un article de commande, les produits peuvent aller et venir, tandis que les commandes déjà créées restent inchangées.

+0

Merci pour la réponse. Je comprends ce que vous dites et vous donne un sens à 100%, bien comment puis-je accomplir cela ou à quoi dois-je le relier? C'est probablement très simple, mais ça ne sonne pas, et je ne suis pas vraiment sûr de savoir comment l'implémenter. –

+0

Cela dépend vraiment de ce que vous voulez. Simplement, je parle juste d'une autre entité telle que 'OrderItem'. À l'intérieur, cela ressemblerait probablement beaucoup à «Produto_Encomenda», sauf qu'au lieu de se rapporter directement à un produit, il suffit de mettre ici les informations pertinentes du produit (nom, image, etc.). La relation serait alors un-à-plusieurs, au lieu de plusieurs-à-plusieurs. Chaque 'OrderItem' serait directement lié à un ordre. Vous * pourriez * avoir encore une clé étrangère dans le produit, si vous voulez, mais vous aurez besoin que cette clé étrangère soit nullable, et vous devriez la définir comme ON DELETE SET NULL. –

+0

Ok Chris Je vais essayer, et je vous ferai savoir comment les choses se sont passées. Merci .. –

1

Je suppose que vous cherchez à faire un viewmodel

Créer une classe qui contient des produits et de la classe Encomenda comme des biens -

Modèle -

 public class MyViewModel 
    { 
     public Produto Pinst{get;set;} 
     public Encomenda Einst{get;set;} 
    } 

Controller ou méthodolo-

public void SomeMethod() 
    { 
     List<MyViewModel> lst = new List<MyViewModel>(); 
     //Now suppose 
     foreach(var items in listThatGetCreatedWithBuyerproductInfo) 
     { 
     MyViewModel obj = new MyViewModel(); 
     obj.Pinst = new Produto(); 
     obj.Einst = new Encomenda(); 

     //Here goes your properties from item in respected class instances 
     obj.Pinst.Nome = items.Nome; 
     obj.Einst.DataSubmissao = items.DataSubmissao; 
     //when you are done loading add obj to list 
     lst.Add(obj); 
     } 
    } 

J'espère que ça aide si ça ne me dit pas !!