[英]update database in asp.net
我正在构建一个 web 应用程序,当用户登录并再次尝试从 web 购买东西时,出现此错误
SqlException:当 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");
}
你在这里从数据库读取
var order = _context.orderFactors.FirstOrDefault(o => o.UserId == userId && !o.IsFinally);
但是,如果 orderDetail 不是 null,您会尝试在此处再次添加该值
_context.orderFactors.Add(order);
您已阅读的订单 object 将具有一个 ID,因此数据库认为您正在尝试向该表添加相同的 ID。
没有确切地看到你是如何插入/更新这个的,很难回答。 也就是说,错误消息是相当具有解释性的(一次)。 您正试图在身份/主键字段中输入一个值。 该字段(很可能)由您的数据库自动生成/增加以保证唯一性。
在您的 saveChanges 函数中的某处,您要么插入(很可能)一个 ID,要么您正在尝试更新一个 ID。 如果这些标记为身份,则除非您设置IDENTITY_INSERT ON
,否则无法更改它们。
仔细检查您的 saveChanges model 及其背后的查询,以确保您没有尝试更新/更改/插入您的主键值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.