0

我正在尝试将 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();
4

1 回答 1

0

我不完全了解您的计划,但是您正在创建或插入新票,并且在您没有设置或检索票的 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 的 add 中,使用 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}  
于 2019-01-14T13:54:43.383 回答