Я использую EF Core версия: 3.0 Поставщик базы данных: Microsoft.EntityFrameworkCore.SqlServer
У меня есть две таблицы: PROFILO (мастер) и PROFILOTITOLODISTUDIO (подробнее) это модель:
PROFILO MODEL
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; }
}
PROFILOTITOLODISTUDIO MODEL
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 должен иметь значение NOT NULL
В действии контроллера 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();
}
I я не нарушаю никаких отношений между PROFILE и PROFILOTITOLODISTUDIO Я просто пытаюсь сделать обновление на дочерней таблице , внешний ключ IDPROFILO в профиле объекта. ProfiloTitoloDiStudio прекрасно улучшен !!!