更新www.example.com中的数据库asp.net

jobtbby3  于 2023-01-27  发布在  .NET
关注(0)|答案(2)|浏览(185)

我正在构建一个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");
    }
rggaifut

rggaifut1#

您正在从DB阅读数据

var order = _context.orderFactors.FirstOrDefault(o => o.UserId == userId && !o.IsFinally);

但是,如果orderDetail不为空,则尝试在此处再次添加该值

_context.orderFactors.Add(order);

您所读取的订单对象将有一个ID,因此DB认为您正在尝试向该表添加相同的ID。

t40tm48m

t40tm48m2#

如果不知道你是如何插入/更新这个错误的,很坚韧回答。也就是说,这个错误消息是相当有解释性的(仅此一次!)。你试图在一个标识/主键字段中输入一个值。这个字段(很可能)是由你的数据库自动生成/递增的,以保证唯一性。
在saveChanges函数的某个地方,您可能正在插入(很可能)一个ID,或者正在尝试更新一个ID。如果这些标记为标识,则除非设置IDENTITY_INSERT ON,否则无法更改它们。
仔细检查您的saveChanges模型及其背后的查询,以确保您没有尝试更新/更改/插入您的主键值。

相关问题