[英]The INSERT statement conflicted with the FOREIGN KEY constraint - asp.net.mvc5
[英]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”中发生了冲突。
这两个表是OrderDetail
和Orders
。
订购:
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.