如何同时向sql添加2个产品

时间:2017-12-05 14:53:38

标签: sql-server asp.net-mvc

我有两张桌子:

order: IDorder,productId,数量,价格

orderdetails: ID,ShipName,ShipMobile,ShipAddress,ShipEmail,DateOrder。

  • My OrderDetailsDao(作为模特):

    raovatmuabanthucungEntities re = null;
    public OrderDetailsDao()
    {
        re = new raovatmuabanthucungEntities();
    }
    public long Insert(orderdetails detail)
    {
        re.orderdetails.Add(order);
        re.SaveChanges();
        return order.ID;
    }
    
  • My OrderDao:



raovatmuabanthucungEntities re = null;
        public OrderDao()
        {
            re = new raovatmuabanthucungEntities();
        }
        public bool Insert(order order)
        {
            try
            {
                re.order.Add(order);
                re.SaveChanges();
                return true;
            }
            catch
            {
                return false;
            }
        }




  • 我的控制器:



 public ActionResult Payment(string shipName, string mobile, string address, string email)
        {
            var detail = new orderdetail();
            detail.NgayDatHang = DateTime.Now;
            detail.ShipAddress = address;
            detail.ShipMobile = mobile;
            detail.ShipName = shipName;
            detail.ShipEmail = email;
            try
            {
                var id = new OrderDetailsDao().Insert(detail);
                var cart = (List<CartItem>)Session[CartSession];
                var orderDao = new OrderDao();
                decimal total = 0;
                foreach (var item in cart)
                {
                    var order = new order();
                    order.ProductId= item.Product.ProductId;
                    order.IDOrder = id;
                    order.Price = item.Product.Price;
                    order.quantity = item.quantity;
                    orderDao.Insert(order);
                }
            }
            catch (Exception ex)
            {
                //ghi log
                return Redirect("/loi-thanh-toan");
            }
            return Redirect("/hoan-thanh");
        }
&#13;
&#13;
&#13;

  • 我已经尝试调试但是foreach循环工作正常并且当我点击按钮PAY时返回2个产品。但是在我的sql server表中只插入了1条记录。 var cart = (List<CartItem>)Session[CartSession];是我保存添加到购物车的产品的会话。很抱歉打扰你,但我不知道如何解决这个问题。请告诉我,如果我错过了什么,我会更新我的问题...感谢所有人。

1 个答案:

答案 0 :(得分:1)

实际上在下面提到的那一行:

order.IDOrder = id;

您正在尝试将重复项插入主键字段(由您在消息中传达),因此第一次成功插入值,第二次不能这样做,因为不允许重复主键。

另外,re.SaveChanges();正在为数据库写操作添加一个开头。最好是创建IEnumerable或“order”列表并将其传递给Insert()以一次保存。

改变这个:

    try
    {
        var id = new OrderDetailsDao().Insert(detail);
        var cart = (List<CartItem>)Session[CartSession];
        var orderDao = new OrderDao();
        decimal total = 0;
        foreach (var item in cart)
        {
            var order = new order();
            order.ProductId= item.Product.ProductId;
            order.IDOrder = id;
            order.Price = item.Product.Price;
            order.quantity = item.quantity;
            orderDao.Insert(order);
        }
    }

为:

    try
    {
        var id = new OrderDetailsDao().Insert(detail);
        var cart = (List<CartItem>)Session[CartSession];
        var orderDao = new OrderDao();
        decimal total = 0;
        List<order> orders = new List<order>();
        foreach (var item in cart)
        {        
            var order = new order();            
            order.ProductId= item.Product.ProductId;
            order.IDOrder = id;
            order.Price = item.Product.Price;
            order.quantity = item.quantity;
            orders.Add(order);
        }
        orderDao.Insert(orders);
    }

另外,改变这个:

  public bool Insert(order order)
  {
    try
    {
        re.order.Add(order);
        re.SaveChanges();
        return true;
    }
    catch
    {
        return false;
    }
}

为:

public bool Insert(List<order> orders)
{
    foreach(var order in orders)
    {
         re.order.Add(order);
    }  
    try
    {               
        re.SaveChanges();
        return true;
    }
    catch
    {
        return false;
    }
}