Моя ситуация была немного другой, и потребовалось некоторое время, чтобы понять это правильно, поэтому я подумал, что это стоит документировать. У меня есть две связанные таблицы, Quote и QuoteExtension:
- Цитата (родительский, первичный ключ QuoteId)
- QuoteExtension (Вычисляемые поля для Quote, первичного и внешнего ключа QuoteId)
Мне не нужно было устанавливать действие OnDelete, чтобы заставить его работать - но комментарий Крейга (если бы я мог проголосовать так больше, я бы!) Заставил меня обнаружить проблему. Я пытался удалить цитату, когда QuoteExtension не был загружен. Поэтому я нашел два способа, которые сработали:
var quote = ent.Quote.Include("QuoteExtension").First(q => q.QuoteId == 2311);
ent.DeleteObject(quote);
ent.SaveChanges();
Или:
var quote = ent.Quote.First(q => q.QuoteId == 2311);
if (quote.QuoteExtension != null)
ent.Refresh(RefreshMode.ClientWins, quote.QuoteExtension);
ent.DeleteObject(quote);
ent.SaveChanges();
Интересно, что попытка удалить QuoteExtension вручную не сработала (хотя, возможно, это произошло, если бы я включил ent.SaveChanges () посередине - это обычно происходит только в конце единицы работы в этой системе, поэтому я хотел то, что не полагалось на это.