Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 插入数据时,为什么插入与FK约束冲突?_C#_Sql Server - Fatal编程技术网

C# 插入数据时,为什么插入与FK约束冲突?

C# 插入数据时,为什么插入与FK约束冲突?,c#,sql-server,C#,Sql Server,我正在将数据插入数据库的Receipts表中。此表与链接到Stores.Id=Receipts.StoreId 插入有时会遇到以下错误: System.Data.SqlClient.SqlException:INSERT语句与外键约束“FK_dbo.Receipts_dbo.Stores_StoreId”冲突 我在数据库中发布了5000篇文章,而这个错误在那批文章中只发生了10次。所有5 000个员额的数据都相同(见下文代码) 编辑 我已经运行了第二批5000篇文章,这一次所有的文章都没有错误,

我正在将数据插入数据库的Receipts表中。此表与链接到
Stores.Id=Receipts.StoreId

插入有时会遇到以下错误:

System.Data.SqlClient.SqlException:INSERT语句与外键约束“FK_dbo.Receipts_dbo.Stores_StoreId”冲突

我在数据库中发布了5000篇文章,而这个错误在那批文章中只发生了10次。所有5 000个员额的数据都相同(见下文代码)

编辑

我已经运行了第二批5000篇文章,这一次所有的文章都没有错误,有效地使错误发生的几率达到1000:1

我已经验证了Stores表中有一个存储,其Id值在ajax post数据中指定

有谁能告诉我为什么我发送的帖子中只有1/500的帖子出现了这个错误

// function gets the receipt number from the loop that calls it
function CreateData(receiptNumber) {
    var StoreId = 5;
    var ReceiptValue = 100.50;
    var Cashback = 10.50;

    var Receipt = {
        "StoreId": StoreId,
        "ReceiptNumber": receiptNumber,
        "ReceiptValue": ReceiptValue,
        "Cashback": Cashback };

    return Receipt;
}

// function initiates the loop for x times
function LoopPostData ( iterations ) {

    for ( var i = 1; i <= iterations; i++ ) {
        PostData( i );
    }
}

function PostData ( iteration ) {
    var PostCompleted = false,
        ReceiptNumber = "TST-"+ pad( iteration, 4 );

    UpdatePostsTable( "- Attempting to post "+ ReceiptNumber );

    $.ajax( {
        type: "post",
        url: "http://localhost:54354/api/Receipt",
        data: CreateData( ReceiptNumber ),
        success: function () {
            var msg = "-"+ ReceiptNumber +" was saved on the API";

            UpdateSuccessTable( msg ); // indicate the post was saved
        },
        statusCode: {
            400: function () {
                var msg = "-"+ ReceiptNumber +" was sent to API but not saved";

                UpdateErrorsTable( msg ); // indicate the post couldn't be saved

                PostCompleted = true;
            }
        },
        error: function () {
            if ( PostCompleted ) return;

            var msg = "-"+ ReceiptNumber +" was not sent to the API";

            UpdateErrorsTable( msg ); // indicate the post was sent to the API
        }
    } );
}
上面的ajax文章对此进行了分析

这是Stores表(记住ajax是用Id 5(Roman's Pizza)发布到商店的)

基于此,我不能相信会发生错误,因为在Stores表中没有新收据的链接记录

编辑2

我粘贴了实体框架代码最初用于创建表的POCO类,以及用于创建表的SQL代码

为了节省一些时间,根据错误消息,这里是有问题的外键约束:

ALTER TABLE [dbo].[Receipts]  WITH CHECK ADD  CONSTRAINT [FK_dbo.Receipts_dbo.Stores_StoreId] FOREIGN KEY([StoreId])
REFERENCES [dbo].[Stores] ([Id])
ON DELETE CASCADE
GO
编辑3

我只更新了服务器代码,使EF将其查询记录到VisualStudio中的输出窗口

这是它执行的一个INSERT命令(该命令是随机选择的)


我想您正在尝试将
Store
表中不存在的
storeId
插入到
Receipts
表中…向我们展示FK定义和两个表定义,包括PKs和任何约束。以及任何一个表上的任何触发器。@Kaf every
Receipts
from
CreateData(ReceiptNumber)
具有相同的
StoreID=5
。Ortund:您可能应该调试您的API。可能字段的分配顺序正确。@rbaryyoung数据库图表是否有帮助?您已经指出您存在数据库问题,但只向我们提供了前端代码。我想您正在尝试插入
StoreID
,即在
Store
表中不存在,在
Receipts
表中…向我们显示FK定义和两个表定义,包括PKs和任何约束。以及任何一个表上的任何触发器。@Kaf every
Receipts
from
CreateData(ReceiptNumber)
具有相同的
StoreID=5
。Ortund:您可能应该调试您的API。可能字段的分配顺序正确。@rbaryYoung数据库图表是否有帮助?您已经指出您有数据库问题,但只向我们提供了前端代码。
ALTER TABLE [dbo].[Receipts]  WITH CHECK ADD  CONSTRAINT [FK_dbo.Receipts_dbo.Stores_StoreId] FOREIGN KEY([StoreId])
REFERENCES [dbo].[Stores] ([Id])
ON DELETE CASCADE
GO
INSERT [dbo].[Receipts]([StoreId], [UserId], [ReceiptNumber], 
       [ReceiptValue], [ReceiptDate], [Cashback], [ValidUntil], 
       [Calculated], [Redeemed], [Deleted], [Invoice_Id])
VALUES (@0, NULL, @1, @2, @3, @4, @5, @6, @7, @8, NULL)
SELECT [Id]
FROM [dbo].[Receipts]
WHERE @@ROWCOUNT > 0 AND [Id] = scope_identity()


-- @0: '1' (Type = Int32)
-- @1: 'TST-0006' (Type = String, Size = -1)
-- @2: '100.5' (Type = Decimal, Precision = 18, Scale = 2)
-- @3: '2016/07/28 6:38:38 PM' (Type = DateTime2)
-- @4: '10.5' (Type = Decimal, Precision = 18, Scale = 2)
Opened connection at 2016/07/28 6:38:38 PM +02:00
-- @5: '2016/08/04 6:38:38 PM' (Type = DateTime2)
Started transaction at 2016/07/28 6:38:38 PM +02:00
-- @6: 'False' (Type = Boolean)
-- @7: 'False' (Type = Boolean)
-- @8: 'False' (Type = Boolean)