У меня есть следующий код в контроллере. Я пытаюсь обновить базу данных, но получаю сообщение об ошибке folliwing:Entity Framework 6 несколько транзакций savechanges с внешним ограничением ключа
Оператор INSERT противоречил ограничениям FOREIGN KEY.
using (var context = new EFDbContext())
{
using (var dbContextTransaction = context.Database.BeginTransaction())
{
try
{
// MessageThread
context.MessageThreads.Add(messageThread);
context.SaveChanges();
// Message
context.Messages.Add(message);
context.SaveChanges();
// Recipient
context.Recipients.Add(recipient);
context.SaveChanges();
dbContextTransaction.Commit();
}
catch //(Exception ex)
{
ModelState.AddModelError("", "Something went wrong. Please try again.");
return View("Message", model);
// dbContextTransaction.Rollback(); no need to call this manually.
}
}
}
Класс Message имеет следующее свойство:
[ForeignKey("MessageThread")]
public long MessageThreadID { get; set; } // ID
public virtual MessageThread MessageThread { get; set; }
Я не могу добавить сообщение, потому что MessageThreadID есть ограничение внешнего ключа на MessageThread. Но я не могу сохранить их по одному, это нужно сделать в одной транзакции для целостности данных.
Как это сделать за один раз? Возможно, я могу временно отключить ограничение внешнего ключа?
Это не сработает. Во всяком случае, мне нужно общее решение, потому что свойство получателя, а именно MessageID, имеет отношение FK к сообщению, так же как MessageThreadID в сообщении имеет отношение FK к MessageThread. Это нужно сделать в одной партии. – nmit026