2016-08-04 10 views
0

Ich habe eine Designs-Tabelle, die Links zu einer Junction-Tabelle, die Links zu einer DesignAnalysisSoftware Lookup-Tabelle. Es ist eine 1 zu viele zu 1 Beziehung. Ich versuche, den Datensatz zu aktualisieren und Datensätze aus der Junction-Tabelle hinzuzufügen/zu löschen, ohne die Nachschlagetabelle zu berühren. Ich habe einen Weg gefunden, der die Datensätze aus der Junction-Tabelle entfernt, aber keine Möglichkeit findet, den übergeordneten Datensatz zu aktualisieren, der nur in die Junction-Tabelle eingefügt wird.Hinzufügen eines Datensatzes zu einer Junction-Tabelle beim Aktualisieren eines Datensatzes

der Code im verwenden ist unten.

public bool UpdateDesign(Design design){ 
      if (!Validate(design)){ 
       return false; 
      } 

      var DesignFromDb = _context.Designs.Single(d => d.StructureId == design.StructureId); 

      if (DesignFromDb != null){ 
       _context.Entry(DesignFromDb).CurrentValues.SetValues(design); 

       DesignFromDb.ModifiedDate = DateTime.Now; 
       DesignFromDb.ModifiedByFullName = base.GetUsersFullName(); 
       DesignFromDb.ModifiedBy = base.GetUserLogin(); 

       DesignFromDb.DesignAnalysisSoftwares.Clear(); 
       DesignFromDb.DesignAnalysisSoftwares = design.DesignAnalysisSoftwares; <- this adds to the junction table but also adds to the lookup table 

       } 
      } 
+0

wie Design (Eingang param) erstellt? füge bitte diesen Code hinzu –

Antwort

0

Wenn design.DesignAnalysisSoftwares; gesetzt PK Werte dann müssen nur Zustand design.DesignAnalysisSoftwares; zu EntityState.Unchanged ändern, wie ich in this answer beschrieben:

if (design.DesignAnalysisSoftwares != null) 
{ 
    foreach (var designSoft in design.DesignAnalysisSoftwares) 
     _context.Entry(designSoft).State = EntityState.Unchanged; 
}