當我試圖從資料庫中洗掉 "empresas "時,得到了這個錯誤
。MySqlException。不能洗掉或更新父行:外鍵約束失敗 (utproject1.qsa, CONSTRAINTFK_Qsa_Empresa_EmpresaCnpjFOREIGN KEY (EmpresaCnpj) REFERENCESempresa(Cnpj))
DbUpdateException。在更新條目時發生了一個錯誤。詳情請看內部例外。
在控制器中
// POST: Empresas/Delete/cnpj。 [HttpPost, ActionName("Delete"/span>)/span>] [ValidateAntiForgeryToken] public async Task<IActionResult> DeleteConfirmed(Empresa emp) { string id = emp.Cnpj; id = RemovePontuacao.RmPontCnpj(id); var empresa = await _context.Empresa.FindAsync(id)。 if (empresa == null) { TempData["msg"] = "Este CNPJ n?o está cadastrado"; return RedirectToAction("Delete") 。 } _context.Empresa.Remove(empresa)。 await _context.SaveChangesAsync()。 return RedirectToAction(nameof(Index))。 } private bool EmpresaException。 title">EmpresaExists(string id)。 { return _context.Empresa.Any(e => e.Cnpj == id)。 }Empresa模型
public class Empresa { [ ] [Qsa
public class Qsa { Key] [Key] public string Nome { get; set; } public string Qual { get; set; }我試著用很多方法來解決這個問題,但我沒有得到它
DbContextpublic class MyDbContext : DbContext { public MyDbContext(DbContextOptions<MyDbContext> options) : base(選項 { Database.EnsureCreated()。 } public DbSet<Empresa> Empresa { get; set; } //public DbSet<Qsa> Qsa { get; set; }. //public DbSet<Atividade> Atividade { get; set; } //protected override void OnModelCreating(ModelBuilder modelBuilder) //{ //> foreach (var foreignKey in modelBuilder.Model.GetEntityTypes().SelectMany(e => e.GetForeignKeys())) // { // foreignKey.DeleteBehavior = DeleteBehavior.Restrict; // } // base.OnModelCreating(modelBuilder); //} }uj5u.com熱心網友回復:
在
Empresa中你有public List<而在
Qsa中你有[Key] public string Nome { get; set; }這就自動設定了你需要先從
Qsa釋放你的Empresa依賴的條件。uj5u.com熱心網友回復:
你在Empresa中有一個串列Qsa。這意味著Qsa有Impressa的外鍵(必須是作為一個影子屬性)。我建議你使用expicit屬性
。public class Empresa { [Key] 。 public int Id {get; set; } ..... public virtual ICollection<Qsa> Qsas { get; set; } } public class Qsa { Key] [Key] public int Id {get; set; } ..... public int EmpresaId { get; set; } public virtual Empresa Empresa { get; set; }在這之后你可以嘗試這樣做
var empresa = await _context.Empresa .Include (i=> I.Qsas) .Where(i=> i.Id=id) .FirstOrDefault()。 if (empresa == null) { TempData["msg"] = "Este CNPJ n?o está cadastrado" ; return RedirectToAction("Delete") 。 } if( empresa.Qsas !=null) { _context.Qsa.RemoveRange(empresa.Qsas)。 empressa.Qsas=null。 } _context.Empresa.Remove(empresa)。 await _context.SaveChangesAsync()。轉載請註明出處,本文鏈接:https://www.uj5u.com/net/323087.html
標籤:
