0

aidez s'il vous plaît. Je travaille avec EntityFramework 6. entité ont:Entity Framework 6: Supprimer l'élément enfant pour plusieurs parents

public class PowerStation { 

     public Guid PowerStationId { get; set; } 
     public string Name { get; set; } 

     public Guid PowerStationTypeId { get; set; } 
     public virtual PowerStationType PowerStationType { get; set; } 

     public Guid SubjectId { get; set; } 
     public DateTime SubjectTransactionTime { get; set; } 
     public virtual Subject Subject { get; set; } 

     public Guid ParticipantOremId { get; set; } 
     public DateTime ParticipantOremTransactionTime { get; set; } 
     public virtual ParticipantOrem ParticipantOrem { get; set; } 

     public Guid? DcId { get; set; } 
     public DateTime? DcTransactionTime { get; set; } 
     public virtual Dc Dc { get; set; } 

     public virtual ICollection<Equipment> Equipments { get; set; } 
     public virtual ICollection<DcLink> DcLinks { get; set; } 
     public virtual ICollection<DcPowerStationProposal> DcPowerStationProposals { get; set; } 
} 

J'essaie de supprimer cette entité, mais obtenir exception:

L'opération a échoué: La relation ne pouvait pas être changé car une ou plusieurs des Les propriétés de clé étrangère sont non-nullable. Lorsqu'une modification est apportée à une relation, la propriété de clé étrangère associée est définie sur une valeur nulle. Si la clé étrangère ne prend pas en charge les valeurs nulles, une nouvelle relation doit être définie, la propriété de clé étrangère doit être affectée à une autre valeur non nulle, ou l'objet non lié doit être supprimé.

Je peux essayer ceci:

entity = db.PowerStations 
        .Include(x => x.Equipments) 
        .Include(x => x.DcLinks) 
        .Include(x => x.DcPowerStationProposals) 
        .FirstOrDefault(x => x.PowerStationId == entity.PowerStationId && x.TransactionTime == entity.TransactionTime); 


var station = db.ParticipantOrems.FirstOrDefault(x => x.ParticipantOremId == entity.ParticipantOremId 
       && x.TransactionTime == entity.ParticipantOremTransactionTime); 
       station.PowerStations.Remove(entity); 

var subject = db.Subjects.FirstOrDefault(x => x.SubjectId == entity.SubjectId 
       && x.TransactionTime == entity.SubjectTransactionTime); 
       subject.PowerStations.Remove(entity); 

var dc = db.Dcs.FirstOrDefault(x => x.DcId == entity.DcId 
       && x.TransactionTime == entity.DcTransactionTime); 
       dc.PowerStations.Remove(entity); 

var type = db.PowerStationTypes.FirstOrDefault(x => x.PowerStationTypeId == entity.PowerStationTypeId); 
       type.PowerStations.Remove(entity); 

db.Equipments.Local.Where(x => x.PowerStation == null).ToList().ForEach(r => Equipments.Remove(r)); 
db.DcLinks.Local.Where(x => x.PowerStation == null).ToList().ForEach(r => DcLinks.Remove(r)); 
db.PowerStationProposals.Where(x => x.PowerStation == null).ToList().ForEach(r => DcPowerStationProposals.Remove(r)); 

Répondre

0

Si vous voulez supprimer toute PowerStation vous devez supprimer les migrations et remettre à jour il

+0

Je veux supprimer la ligne dans la base de données, pas à la table. –

+0

Je n'ai pas vérifié le code mais il vous dit que votre table a connecté d'autres tables avec des clés étrangères et qu'elles ne sont pas valables, les rendent nulles ou suppriment des lignes connectées? – minoset

+0

J'ai essayé de supprimer les lignes connectées sans supprimer en cascade, pas d'aide. Nullable - c'est un problème, mais j'ai essayé - pas de résultat. –