Я использую EF Core версии: 3.0 Поставщик базы данных: Microsoft.EntityFrameworkCore.SqlServer
У меня есть две таблицы: PROFILO (мастер) и PROFILOTITOLODISTUDIO (подробности) это модель:
МОДЕЛЬ ПРОФИЛО
public partial class Profilo
{
public Profilo()
{
ProfiloTitoloDiStudio = new List<ProfiloTitoloDiStudio>();
}
[Key]
public Guid IdProfilo { get; set; }
[Required]
[StringLength(256)]
public string Nome { get; set; }
[StringLength(256)]
public string Cognome { get; set; }
[InverseProperty("IdProfiloNavigation")]
public virtual IList<ProfiloTitoloDiStudio> ProfiloTitoloDiStudio { get; set; }
}
МОДЕЛЬ ПРОФИЛОТИТОЛОДИСТУДИО
public partial class ProfiloTitoloDiStudio
{
[Key]
public int IdProfiloTitoloDiStudio { get; set; }
public Guid IdProfilo { get; set; }
[Required]
[StringLength(256)]
public string DenominazioneCorsoStudio { get; set; }
[ForeignKey(nameof(IdProfilo))]
[InverseProperty(nameof(Profilo.ProfiloTitoloDiStudio))]
public virtual Profilo IdProfiloNavigation { get; set; }
}
Внешний ключ IdProfilo в таблице PROFILOTITOLODISTUDIO должен быть НЕ ПУСТОЙ
В действии контроллера Edit я получаю объект с полями, ограниченными представлением, в качестве входных данных, даже если я не изменяю никакого значения, savechanges () всегда возвращает ошибку:
InvalidOperationException: связь между сущностями «Profilo» и «ProfiloTitoloDiStudio» со значением ключа «{IdProfilo: 45c42779-39b6-4047-91d1-12253a79b7f6}» разорвана, но связь либо помечена как «Требуется», либо неявно требуется, поскольку внешний ключ не допускает значения NULL. Если зависимая / дочерняя сущность должна быть удалена при разрыве требуемой связи, настройте связь для использования каскадного удаления.
это код сохранения:
public async Task<IActionResult> Edit(Profilo profiloinput)
{
var _profiloDB = await _dbcontext.Profilo
.Include(p => p.ProfiloTitoloDiStudio)
.SingleOrDefaultAsync(p => p.IdProfilo == profiloinput.IdProfilo);
_profiloDB.Nome = profiloinput.Nome;
_profiloDB.Cognome = profiloinput.Cognome;
_profiloDB.ProfiloTitoloDiStudio = profiloinput.ProfiloTitoloDiStudio;
var x = await _dbcontext.SaveChangesAsync();
}
Я не нарушаю никаких отношений между PROFILE и PROFILOTITOLODISTUDIO. Я просто пытаюсь обновить дочернюю таблицу , внешний ключ IDPROFILO в объекте профиля. ProfiloTitoloDiStudio полностью улучшен !!!