У меня возникла проблема, при которой удаление записи в таблице работает, но только до тех пор, пока в таблице нет дочерних внешних ключей. Теперь, когда у нас есть родительская таблица и вы хотите удалить запись с помощью EF, она терпит неудачу с ошибкой «Связь не может быть изменена, потому что одно или несколько свойств внешнего ключа не могут быть обнулены». Я удалил каскадное удаление в дочерней таблице, ссылающейся на родительскую таблицу. Я тестировал его в SSMS. Он работает нормально. Но изнутри C# это терпит неудачу. У нас есть модель представления, где мы определили общий метод DeleteRow. Это отлично работает, пока удаляемая строка не имеет дочерних таблиц. Он терпит неудачу, если таблица является родительской таблицей. Я попробовал посмотреть здесь на Stackoverflow для ответа и наткнулся на этот вопрос, который теперь закрыт: stackoverflow.com/questions/17723276/delete-a-single-record-from-entity-framework. Ответ на этот вопрос использовал дискретную таблицу в EF. Мы используем дженерики. Вот наш код:Как удалить одну запись из EF, когда вы используете дженерики?
public void DeleteRow(T row)
{
if (App.MainDataContext != null && row != null)
{
App.MainDataContext.Entry<T>(row).State = EntityState.Deleted;
App.MainDataContext.SaveChanges();
}
}
Я не верю, что установление государственной собственности перечислению EntityState.Deleted работает, как это только установить его для записи в родительской таблице, а не для какой-либо из соответствующих записей в дочерние таблицы. (MainDataContext - это объект из файла .EDMX.) Как мы удаляем одну запись из любой таблицы с помощью EF 6, когда мы используем generics для передачи в типе таблицы?
Как насчет [этого] (http://stackoverflow.com/questions/41858097/entity-framework-hard-cascade-delete/41859633#41859633)? На самом деле я вижу, что это то же самое, что и ссылка. Все, что вам нужно, это перевести его, например: 'App.MainDataContext.Set() .Attach (строка); App.MainDataContext.Set () .Remove (row); ' –