По-прежнему невозможно настроить отношение с правилом ON DELETE SET NULL с использованием кода Entity Framework. В качестве обходного пути вам необходимо загрузить все связанные объекты в памяти и , затем при удалении родительского объекта EF выдаст команды SQL, чтобы установить их внешние ключи в Null.Почему ON DELETE SET NULL все еще не реализован в Entity Framework 6? Есть ли загвоздка?
Это, в то время как она тривиальна осуществить это самостоятельно, используя что-то вроде:
protected override void Seed(Context context)
{
context.Database.ExecuteSqlCommand("ALTER TABLE dbo.Guests DROP CONSTRAINT Guest_PreferredLanguage");
context.Database.ExecuteSqlCommand("ALTER TABLE dbo.Guests ADD CONSTRAINT Guest_PreferredLanguage FOREIGN KEY (LanguageID) REFERENCES dbo.Languages(LanguageID) ON UPDATE NO ACTION ON DELETE SET NULL");
}
(Пример взять из this post.)
Я не вижу никаких проблем с этим подходом: Загруженные дочерние объекты будут оставаться в синхронизации с базой данных, поскольку EF будет обновлять (устанавливать на нуль) свои внешние ключи и свойства справки и что другие записи в базе данных затронуты, не наносит вреда, поскольку они еще не были загружены.
Итак, почему эта функция все еще отсутствует? Есть ли скрытая загвоздка?
id нравится видеть эту функцию тоже, но ее больше вопрос для http://entityframework.codeplex.com/discussions –
@philsoady Я не могу найти тему там. Кажется, легко добавить это: он не сильно отличается от каскадного удаления, не так ли? – Dabblernl
Этот вопрос не соответствует теме, поскольку он относится к сайту запроса функций продукта (https://data.uservoice.com/forums/72025-entity-framework-feature-suggestions/) –