Ho una tabella che dovrebbe fare riferimento alla stessa tabella. Ma quando provo ad aggiornare lo schema del database, mi viene questo errore:
Quando provo ad aggiornare lo schema, PMC genera questo errore:
System.Data.SqlClient.SqlException (0x80131904): l'introduzione del vincolo FOREIGN KEY "FK_Directory_Directory_SubOfId" nella tabella "Directory" può causare cicli o più percorsi a cascata. Specificare ON DELETE NO ACTION o ON UPDATE NO ACTION o modificare altri vincoli FOREIGN KEY.
Ho provato a impostare ON DELETE su CASCADE ma niente, ancora lo stesso errore. Non so come impostare NO ACTION perché la mappatura non offre questa opzione.
Cosa con questo?
Entità:
public class Directory : BaseEntity
{
public int ID { get; set; }
public int? SubOfId { get; set; }
[ForeignKey("SubOfId")]
public Directory SubOf { get; set; }
public virtual ICollection<ImageDirectory> ImageDirectory { get; set; }
}
Costruttore di modelli:
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
...
builder.Entity<Directory>().HasOne(e => e.SubOf).WithOne().HasForeignKey<Directory>(a => a.SubOfId).OnDelete(DeleteBehavior.Cascade);
}
Questa eccezione non è dovuta all'autoreferenziazione. Si ottiene quando un'entità può essere eliminata tramite più percorsi a cascata. In base al codice che hai fornito, la mia ipotesi migliore è che qualcosa in corso con ImageDirectory
e le relazioni in gioco siano in realtà la fonte del problema.
Lungo e breve, è necessario esaminare il grafico dell'oggetto per vedere dove la rimozione di un tipo di entità potrebbe causare più cascate. Quindi, dovrai interrompere alcune di queste cascate per procedere. Non c'è molto altro che si può dire per aiutarti, sfortunatamente, senza poter vedere tutte le tue entità e le relazioni tra tutti loro.