【问题标题】:Inner Exception Error: The INSERT statement conflicted with the FOREIGN KEY constraint内部异常错误:INSERT 语句与 FOREIGN KEY 约束冲突
【发布时间】:2019-01-14 13:20:10
【问题描述】:

我正在尝试将 Ticket Table 的 Id 添加到另一个表 (TrackTicket) 并将其插入到字段 (TicketId) 中,但出现此错误

错误:EntityFramework.dll 中出现“System.Data.Entity.Infrastructure.DbUpdateException”类型的异常,但未在用户代码中处理

-- 内部异常错误:插入语句与外键约束冲突\“FK_dbo.TrackTickets_dbo.Tickets_TicketId\”。冲突发生在数据库\"databasename"\", table\"dbo.Tickets"\, column 'Id'.\语句已终止

这是什么意思?救命!

代码

控制器

_context.Tickets.Add(new Ticket {ClientId = userId , Subject = viewModel.Ticket.Subject, TypeOfTicket = viewModel.Ticket.TypeOfTicket, ConcernedDept = viewModel.Ticket.ConcernedDept, Date = DateTime.Now});

_context.TicketContents.Add(new TicketContent {Subject = viewModel.Ticket.Subject, Content = viewModel.TicketContent.Content});

_context.TrackTickets.Add(new TrackTicket { ClientId = userId,TicketId = viewModel.Ticket.Id  ,StatusHelpDesk = "Received", DateHelpDeskReceived = DateTime.Now });

_context.SaveChanges();

【问题讨论】:

    标签: asp.net-mvc insert foreign-keys constraints inner-exception


    【解决方案1】:

    我不完全了解您的计划,但您正在创建或插入新票证,并且在您没有设置或检索票证的 id 时创建或插入引用票证的轨道票证。

    此行还没有 id。要么在此处设置 id,要么创建变量票证并使用该 id 链接到 TrackTickets。 _context.Tickets.Add(new Ticket {ClientId = userId, Subject = viewModel.Ticket.Subject, TypeOfTicket = viewModel.Ticket.TypeOfTicket, ConcernedDept = viewModel.Ticket.ConcernedDept, Date = DateTime.Now});

    添加将失败,因为 TicketId 无法链接到某些东西(没有插入具有该 ID 的票证。

    _context.TrackTickets.Add(new TrackTicket { ClientId = userId, TicketId = viewModel.Ticket.Id, StatusHelpDesk = "Received", DateHelpDeskReceived = DateTime.Now });
    

    如果您自动生成ticketId,您可以使用它的方式如下:

    var newTicket = new Ticket {ClientId = userId, Subject = viewModel.Ticket.Subject, TypeOfTicket = viewModel.Ticket.TypeOfTicket, ConcernedDept = viewModel.Ticket.ConcernedDept, Date = DateTime.Now}  
    _context.Tickets.Add(newTicket);
    _context.SaveChanges();
    

    如果您现在重用 newTicket 对象,这将有一个 id。所以在添加trackTickets时,使用newTicket的id

    _context.TrackTickets.Add(new TrackTicket { ClientId = userId, TicketId = newTicket.Id, StatusHelpDesk = "Received", DateHelpDeskReceived = DateTime.Now });
    

    如果您不自动生成票证 ID,则必须在创建票证时设置 ID(添加到上下文):

    var newTicket = new Ticket { Id = viewModel.Ticket.Id, ClientId = userId, Subject = viewModel.Ticket.Subject, TypeOfTicket = viewModel.Ticket.TypeOfTicket, ConcernedDept = viewModel.Ticket.ConcernedDept, Date = DateTime.Now}  
    

    【讨论】:

    • 我在哪里为票证创建变量以获取 id?它需要去 _context.SaveChanges() 来创建 Ticket Id 对吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多