繁体   English   中英

ASP.NET插入语句与外键约束冲突

[英]ASP.NET the insert statement conflicted with the foreign key constraint

我需要一些指导,以确保每次尝试添加产品时为什么我的网站都会不断出现此错误。 让您知道我确实做了一些更改,但是在完成之后,我完全重新创建了数据库。 我不断收到以下错误:

INSERT语句与FOREIGN KEY约束“ FK_dbo.OrderDetails_dbo.Orders_OrderId”冲突。 数据库“ MythData.mdf”的表“ dbo.Orders”的列“ Id”中发生了冲突。

这两个表是OrderDetailOrders

订购:

CREATE TABLE [dbo].[Orders] 
(
    [Id]          INT            IDENTITY (1, 1) NOT NULL,
    [CustomerId]  INT            NOT NULL,
    [ProductId]   INT            NOT NULL,
    [ShipName]    NVARCHAR (MAX) NULL,
    [ShipAddress] NVARCHAR (MAX) NULL,
    [ShipCity]    NVARCHAR (MAX) NULL,
    [ShipState]   NVARCHAR (MAX) NULL,
    [ShipZip]     NVARCHAR (MAX) NULL,

    CONSTRAINT [PK_dbo.Orders] PRIMARY KEY CLUSTERED ([Id] ASC),
    CONSTRAINT [FK_dbo.Orders_dbo.Customers_CustomerId] 
      FOREIGN KEY ([CustomerId]) 
      REFERENCES [dbo].[Customers] ([Id]) ON DELETE CASCADE
);

CREATE NONCLUSTERED INDEX [IX_CustomerId] 
   ON [dbo].[Orders]([CustomerId] ASC); 

OrderDetail表:

CREATE TABLE [dbo].[OrderDetails] 
(
    [Id]          INT             IDENTITY (1, 1) NOT NULL,
    [OrderId]     INT             NOT NULL,
    [ProductId]   INT             NOT NULL,
    [TotalCost]   DECIMAL (18, 2) NOT NULL,
    [SubTypeMail] BIT             NOT NULL,
    [Quantity]    INT             NOT NULL,

    CONSTRAINT [PK_dbo.OrderDetails] PRIMARY KEY CLUSTERED ([Id] ASC),
    CONSTRAINT [FK_dbo.OrderDetails_dbo.Orders_OrderId] 
       FOREIGN KEY ([OrderId]) 
       REFERENCES [dbo].[Orders] ([Id]) ON DELETE CASCADE
);

CREATE NONCLUSTERED INDEX [IX_OrderId]
    ON [dbo].[OrderDetails]([OrderId] ASC);

错误弹出的类:

using (DataContext entities = new DataContext())
{
     var orderDetail = entities.OrderDetails.Create();
     decimal price = 0;

     if (drpSub.SelectedValue == "Mailed")
     {
         price = 10;
         orderDetail.SubTypeMail = true;
     }
     else
     {
         price = 5;
         orderDetail.SubTypeMail = false;
     }

     Count = orderDetail.Quantity;
     orderDetail.TotalCost = Count * price;

     entities.OrderDetails.Add(orderDetail);
     entities.SaveChanges(); << this line is the issue!
}

还包括跟踪说明的内容:

说明:执行当前Web请求期间发生未处理的异常。 请查看堆栈跟踪,以获取有关错误及其在代码中起源的更多信息。

异常详细信息:System.Data.SqlClient.SqlException:INSERT语句与FOREIGN KEY约束“ FK_dbo.OrderDetails_dbo.Orders_OrderId”冲突。 数据库“ MythData.mdf”的表“ dbo.Orders”的列“ Id”中发生了冲突。

源错误:

第121行:orderDetail.TotalCost = Count *价格;
第122行:entities.OrderDetails.Add(orderDetail);
第123行:entities.SaveChanges();
第124行:while(Count!= 0)
第125行:{

源文件:c:\\ Users \\ arielle davenport \\ Desktop \\ pets \\ pets \\ MythPetsDatabase \\ MythPetsDatabase \\ Pages \\ Products.aspx.cs行:123

我知道这很长,但是可以提供任何帮助。 现在真的卡住了!

该错误消息告诉您确切的问题是:您正在尝试将具有外键约束的行插入到另一个表中,并且该列中的值在另一个表中不存在。

让我们分解一下:

The INSERT statement conflicted with the FOREIGN KEY constraint "FK_dbo.OrderDetails_dbo.Orders_OrderId". 
The conflict occurred in database "MythData.mdf", table "dbo.Orders", column 'Id'.

它为您提供了约束的名称,因此您可以根据需要查看其定义。 但是这个名称几乎可以告诉您您需要了解的内容。有一个限制,即OrderDetails表中的OrderId必须与Orders表中的ID匹配。 但是,Orders表当前没有与您要插入到OrderDetails表中的ID匹配的ID。 它甚至告诉您问题出在“订单表”中,其中“ id”列没有与您要插入到OrderDetails中的行匹配的值。

有两个潜在原因:

1)您的代码中存在一个错误,该错误试图将错误的值插入OrderDetails表的id列中,或者根本无法在Order表中插入一行

或更可能:

2)您尝试以错误的顺序插入行...您需要在将订单详细信息插入OrderDetails之前,将订单插入Orders表。

您必须确保在插入OrderDetails之前已经插入了Order,以便满足外键约束的条件。 这正是FK约束的用途:为了防止您在某些值无效的情况下(至今)插入不一致的数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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