我正在构建一个web应用程序,当用户登录并尝试从web购买某样东西时,此错误出现
SQL异常:当IDENTITY_INSERT设置为OFF时,无法为表'orderFactors'中的标识列插入显式值。
public IActionResult AddToCart(int itemId)
{
var product = _context.Products.Include(p => p.Item).SingleOrDefault(p => p.ItemId == itemId);
if (product != null)
{
int userId = int.Parse(User.FindFirstValue(ClaimTypes.NameIdentifier).ToString());
var order = _context.orderFactors.FirstOrDefault(o => o.UserId == userId && !o.IsFinally);
if (order != null)
{
var orderDetail = _context.orderDetails.FirstOrDefault(o => o.OrderId == order.OrderId && o.ProductId == product.Id);
if (orderDetail != null)
{
orderDetail.Count += 1;
}
else
{
_context.orderFactors.Add(order);
_context.orderDetails.Add(new OrderDetail()
{
OrderId = order.OrderId,
ProductId = product.Id,
price = product.Item.Price,
Count = 1
});
}
}
else
{
order = new OrderFactor()
{
IsFinally = false,
CreateDate= DateTime.Now,
UserId= userId
};
_context.orderFactors.Add(order);
_context.SaveChanges();
_context.orderDetails.Add(new OrderDetail()
{
OrderId = order.OrderId,
ProductId = product.Id,
price = product.Item.Price,
Count = 1
});
}
_context.SaveChanges();
}
return RedirectToAction("ShowCart");
}
2条答案
按热度按时间rggaifut1#
您正在从DB阅读数据
但是,如果orderDetail不为空,则尝试在此处再次添加该值
您所读取的订单对象将有一个ID,因此DB认为您正在尝试向该表添加相同的ID。
t40tm48m2#
如果不知道你是如何插入/更新这个错误的,很坚韧回答。也就是说,这个错误消息是相当有解释性的(仅此一次!)。你试图在一个标识/主键字段中输入一个值。这个字段(很可能)是由你的数据库自动生成/递增的,以保证唯一性。
在saveChanges函数的某个地方,您可能正在插入(很可能)一个ID,或者正在尝试更新一个ID。如果这些标记为标识,则除非设置
IDENTITY_INSERT ON
,否则无法更改它们。仔细检查您的saveChanges模型及其背后的查询,以确保您没有尝试更新/更改/插入您的主键值。