Entity Framework Core effacer en cascade "un à plusieurs" de la relation
public class Station : IEntitie
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public virtual ICollection<RegulatorySchedule> RegulatoryScheduleDispatchStations { get; set; }
public virtual ICollection<RegulatorySchedule> RegulatoryScheduleDestinationStations { get; set; }
}
public class RegulatorySchedule : IEntitie
{
[Key]
public int Id { get; set; }
public virtual Station DispatchStation { get; set; }
public virtual Station DestinationStation { get; set; }
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<RegulatorySchedule>()
.HasOne(s => s.DestinationStation)
.WithMany(s => s.RegulatoryScheduleDestinationStations)
.OnDelete(Microsoft.EntityFrameworkCore.Metadata.DeleteBehavior.Restrict);
modelBuilder.Entity<RegulatorySchedule>()
.HasOne(s => s.DispatchStation)
.WithMany(s => s.RegulatoryScheduleDispatchStations)
.OnDelete(Microsoft.EntityFrameworkCore.Metadata.DeleteBehavior.Restrict);
}
La base de données est créée lors de la migration que lorsque j'ai clairement exposer le comportement lors de la suppression de Restrict
.
OnDelete (Microsoft.EntityFrameworkCore.Metadata.DeleteBehavior.Restrict)
Sinon, il déclenche une exception:
"L'introduction de la contrainte de CLÉ ÉTRANGÈRE
'FK_RegulatorySchedules_Stations_dispatchstationid' sur la table
'RegulatorySchedules" peut provoquer de cycles ou en cascade de plusieurs chemins.
Spécifier on DELETE NO ACTION ou de la mise À JOUR, AUCUNE ACTION, ou modifier d'autres
Les contraintes de CLÉ ÉTRANGÈRE."
J'ai besoin de la suppression de la Station les Stations de la table et de la table des propriétés liées à la RegulatorySchedules DispatchStation et DestinationStation exposés à NULL.
Mais l'option de restriction d'accès il existe une exception lorsque vous supprimez un SetNull je ne peux pas mettre.
Dites-moi comment être?
OriginalL'auteur Aldmi | 2017-01-18
Vous devez vous connecter pour publier un commentaire.
Décrit un "problème" n'est pas liée à Entity Framework - c'est la restriction de MS SQL Server. Table avec plusieurs FKs peut avoir qu'un seul d'entre eux avec cascade supprimer.
Donc, dès que vous avez besoin de FKs avoir cascade - vous devez mettre en œuvre un tel "nettoyage" dans votre code. Définir un (ou les deux) FKs à
DeleteBehavior.Restrict
, et dans votre contrôleur/service avant le retrait deStation
trouver manuellement et supprimer toutes liéesRegulatorySchedule
OriginalL'auteur Dmitry
Dmitry réponse a parfaitement fonctionné. Pour tout futur voyageur un exemple de travail d'un tableau de correspondance ci-dessous.
Le code se trouve dans le
OnModelCreating(ModelBuilder modelBuilder)
méthode dans votreDbContext
classe:OriginalL'auteur mmr