0

J'ai le code EF4 suivantes premières classes:code EF4 Première Ajout d'une entité avec null propriété de navigation virtuelle à un 1 à plusieurs

[Serializable] 
public class WOChangeLogHeader 
{ 
    [Key] 
    public int WOChangeLogHeaderId { get; set; } 
    public DateTime tadded { get; set; } 

    public virtual WorkOrderHeader WO { get; set; } 
    public int WorkOrderHeaderId { get; set; } 

    [MaxLength(50)] 
    public string chng_type { get; set; } 
    [MaxLength(50)] 
    public string chng_process { get; set; } 

    public int chng_by { get; set; } 

    public virtual ICollection<WOChangeLog> ChangeLogRecords {get;set;} 

} 

[Serializable] 
public class WOChangeLog 
{ 
    [Key] 
    public int WOChangeLogId { get; set; } 
    public DateTime tadded { get; set; } 

    public virtual WOChangeLogHeader ChangeLogHeader { get; set; } 
    public int WOChangeLogHeaderId { get; set; } 

    [MaxLength(50)] 
    public string chng_field { get; set; } 
    public string old_value { get; set; } 
    public string new_value { get; set; } 

} 

et configuration l'ajout d'une nouvelle WoChangeLogHeader comme ceci:

private void addWOChangeLogRecord(string chgField, string oldVal, string newVal, WorkOrderHeader wo) 
    { 


     WOChangeLog log = new WOChangeLog(); 
     log.chng_field = chgField.Trim(); 
     log.old_value = oldVal == null ? "-NULL VALUE-" : oldVal.Trim(); 
     log.new_value = newVal == null ? "-NULL VALUE-" : newVal.Trim(); 
     log.tadded = DateTime.Now; 


     if (CurrentWOChangeLogHeader == null) 
     { 

      CurrentWOChangeLogHeader = new WOChangeLogHeader(); 
      CurrentWOChangeLogHeader.WO = wo; 
      CurrentWOChangeLogHeader.WorkOrderHeaderId = wo.WorkOrderHeaderId; 
      CurrentWOChangeLogHeader.chng_by = -2; 
      CurrentWOChangeLogHeader.chng_process = "WindowsService"; 
      CurrentWOChangeLogHeader.chng_type = "Auto-Update"; 
      CurrentWOChangeLogHeader.tadded = DateTime.Now; 

     } 

     CurrentWOChangeLogHeader.ChangeLogRecords.Add(log); // Error here 

    } 

Cependant à cette propriété Point ChangeLogRecords de navigation est nulle si je reçois une erreur de référence d'objet nul ...

Mais si je tente d'ajouter le WOChangeLogHeader sans ajouter d'enfants, de sorte tha t Je peux ensuite le référencer comme suit:

WOChangeLog log = new WOChangeLog(); 
log.chng_field = chgField.Trim(); 
log.old_value = oldVal == null ? "-NULL VALUE-" : oldVal.Trim(); 
log.new_value = newVal == null ? "-NULL VALUE-" : newVal.Trim(); 
log.tadded = DateTime.Now; 
log.ChangeLogHeader = CurrentWOChangeLogHeader; 

puis j'obtiens l'erreur suivante? L'opération a échoué: La relation n'a pas pu être modifiée car une ou plusieurs des propriétés de clé étrangère sont non nulles. 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, une autre valeur non nulle doit être affectée à la propriété de clé étrangère ou l'objet non lié doit être supprimé.

Il ne me laisse pas SaveChanges sur le contexte où les ChangeLogRecords est nulle soit ...

Comment ajouter une nouvelle entité qui est le parent dans un relation 1 à plusieurs comme ça?

Merci Greg

Répondre

0

Le problème peut être ici:

public virtual WOChangeLogHeader ChangeLogHeader { get; set; } 
public int WOChangeLogHeaderId { get; set; } 

Ces deux lignes font référence à l'en-tête, mais seulement la première ligne est nécessaire.

Essayez de supprimer la deuxième ligne.

Questions connexes