在线商店 - 使用多个产品MVC .net创建订单

时间:2017-07-05 14:16:55

标签: asp.net asp.net-mvc model-view-controller ef-code-first code-first

所以我正在使用Code-First MVC构建在线商店

所以我现在创建了这个模型类(现在不要认为属性的类型太严重了):

产品(产品):

 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(Products)和Encomenda(Order)之间的连接表

   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个或更多产品。 如何将所有这些产品存储在订单的一行中? 为阅读时间提前干杯和感谢。

2 个答案:

答案 0 :(得分:1)

我不确定你是什么意思&#34;单行订单&#34;。每个产品都是一个单独的订单项,您的实体已经通过多对多关系对其进行了建模。

然而,一般来说,这种设置是一个非常糟糕的主意。您的订单不应与产品直接相关。相反,您的订单应该只有一个订单商品,您将根据销售的产品创建这些订单商品。原因是产品很可能会发生变化。例如,如果某个产品因不再可用而被删除,那么这并不能否定它之前在订单中销售的事实。但是,为了保持参照完整性,与该产品一起销售的任何订单也必须与该产品的关系被删除。通过拥有一个完全独立的实体,即订单商品,产品可以来去,而已经创建的订单不受影响。

答案 1 :(得分:1)

我猜你想制作一个viewmodel

创建一个包含Products和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);
       } 
    }

希望它有助于它不告诉我!!