我有两张桌子:
表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;
var cart = (List<CartItem>)Session[CartSession];
是我保存添加到购物车的产品的会话。很抱歉打扰你,但我不知道如何解决这个问题。请告诉我,如果我错过了什么,我会更新我的问题...感谢所有人。 答案 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;
}
}