0

所以我建立使用代碼優先MVC網店 - 建立包含多個產品的訂單MVC .NET

所以我創造了這個模型類,現在網店的(不走類型的屬性太嚴重的現在):

產品(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(按順序):

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; } 

} 

而produtos(產品)和Encomenda(訂單)

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; } 

    } 

所以我的問題是..之間的連接表 讓我們假設一個負荷消費購買2或3件或以上。 如何將所有這些產品存儲在訂單的一行中? 歡呼和感謝了很多提前閱讀的時間。

回答

1

我不確定「一行訂單」的含義。每個產品都是單獨的訂單項,並且您的實體已通過多對多關係對其進行建模。

但是,通常這種設置是一個非常糟糕的主意。您的訂單不應與產品直接相關。相反,您的訂單應該只有一個訂單項目,並且您將根據銷售的產品創建這些訂單項目。原因是產品很可能會改變。例如,如果產品因不再可用而被移除,例如,這並不否定之前以訂單出售的事實。但是,爲了保持參照完整性,與該產品一起出售的任何訂單也必須與該產品的關係被移除。通過擁有一個完全獨立的實體,即訂單商品,產品可以來去,而已經創建的訂單不受影響。

+0

感謝您的回覆。 我明白你在說什麼,並使100%的感覺,儘管如何我可以做到這一點,或我應該怎麼聯繫它?可能這很簡單,但它現在不是響亮的,我真的不知道該如何實現。 –

+0

這真的取決於你想要什麼。簡單地說,我只是談論另一個實體,比如'OrderItem'。在內部,它可能看起來像'Produto_Encomenda'目前所做的一樣,除了與產品直接相關外,您只需在此輸入相關產品信息(名稱,圖像等)即可。這種關係將是一對多的,而不是多對多的關係。每個'OrderItem'將直接與一個訂單相關。如果你願意,你*可以*仍然有一個外鍵返回給產品,但是你需要這個外鍵是可空的,並且應該將它設置爲ON DELETE SET NULL。 –

+0

好吧克里斯我會試試看,我會讓你知道事情已經過去了。 謝謝.. –

1

我猜你正在尋找做一個視圖模型

創建包含產品和Encomenda類作爲屬性的類 -

型號 -

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

控制器或方法 -

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); 
     } 
    } 

希望它有幫助,如果它不告訴我!

相關問題