#c# #sql-server #entity-framework-core #ef-code-first
#c# #sql-сервер #entity-framework-core #ef-code-first
Вопрос:
Я новичок в Entity Framework, и у меня есть API, который может удалять записи из базы данных SQL Server, у меня есть дочерняя таблица ResidenceType
, и я могу удалить строку, используя идентификатор, у меня есть родительская таблица PropertyGroups
с внешним ключом ResidenceTypeId
. Есть ли способ, которым я могу установить значение внешнего ключа NULL
при удалении строки, ResidenceType
которая связана?
Итак, поведение, которое мне нужно, заключается в том, что если я удаляю идентификатор 1 из ResidenceType
таблицы, мне нужно, чтобы ядро EF установило ResidenceTypeId
столбец в PropertyGroups
значение NULL
(или пустой). Я пробовал переопределить OnModelCreating
метод в своем DataContext
классе, но мне не очень повезло, буду признателен за любой совет или помощь.
Ответ №1:
В классе Dbcontext установлен OnDelete
modelBuilder.Entity<Land>()
.HasOne(l => l.Building)
.WithMany(b => b.Lands)
.HasForeignKey(l => l.BuildingId)
.OnDelete(Microsoft.EntityFrameworkCore.Metadata.DeleteBehavior.SetNull);
Ответ №2:
Во-первых, убедитесь, если еще нет, что FK_PropertyGroups_ResidenceTypes_ResidenceTypeId допускает значение NULL, а затем при удалении ResidenceType вам просто нужно будет выпустить update , до SaveChanges вы могли бы использовать каждую группу свойств для обновления значения FK до null…Я думаю, это сработало бы … но искали ли вы решение, как внести изменения или как такое поведение будет разрешено, поэтому убедитесь, что FK допускает нули, и в этом случае предыдущее решение является ответом.
Ответ №3:
Оказывается, я все настроил правильно, мне просто нужно было добавить предложение Include в метод удаления.
var residenceType = await _context.ResidenceTypes.Include(p => p.PropertyGroups).FirstOrDefaultAsync(i => i.PropertyGroupName == name);
Добавление этого значения приводит к тому, что соответствующий столбец идентификатора становится нулевым, благодаря людям, которые пытались помочь.