繁体   English   中英

更新数据库 asp.net

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM