Wie aktualisieren Sie die navigation Eigenschaften in entity framework?

Ich bin versucht, zu aktualisieren zwei Objekte in einer Datenbank gleichzeitig. Mit meinem aktuellen code hier scheint es nur aktualisieren meine navigation Eigenschaft. Zum Beispiel, wenn der "Score" in meiner ersten Klasse verpasst wird es nicht aktualisiert. Aber wenn alles, was in der zweiten Klasse verpasst, es wird richtig aktualisiert. Ich bin nicht sicher, was mache ich hier falsch. Dies ist der code-first entity framework.

Ich habe zwei Klassen:

public class SampleClass
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }
    public int TestId { get; set; }
    public string Items { get; set; }
    public int Score { get; set; }

    public IList<Test> Test { get; set; }
}

Einer anderen Klasse, die wie folgt aussieht:

public class Test
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int TestId { get; set; }
    public double RawScore { get; set; }
    public double PercentScore { get; set; }

    public int SampleClassId { get; set; }

    [ForeignKey("SampleClassId")]
    public virtual SampleClass SampleClass { get; set; }
}

Update in der Datenbank habe ich dieses:

    var entry = context.Entry(sampleFormClass);
    entry.State = System.Data.Entity.EntityState.Modified;
    entry.Property(e => e.Items).IsModified = false;

    foreach (var navigationProperty in myTestClass.Test)
    {
           var entityEntry = context.Entry(navigationProperty);
           entityEntry.State = System.Data.Entity.EntityState.Modified;
           entityEntry.Property(navProp => navProp.SampleClassId).IsModified = false;
    }

    context.FormData.Attach(sampleFormClass);
    }
    context.SaveChanges();

Wenn ich entfernen, die foreach-in meiner Methode um ein Objekt zu aktualisieren, dann wird es nicht aktualisiert, meine nav-Eigenschaft. Wie kann ich ein update für meine beiden-Objekt und die Liste der Objekte zur gleichen Zeit?

Lösung für mein problem

Bearbeiten: ich war in der Lage, fix mein eigenes problem durch ändern Sie den code in meine update-Methode, um diese:

    context.FormData.Attach(sampleFormClass);

    var entry = context.Entry(sampleFormClass);
    entry.State = System.Data.Entity.EntityState.Modified;
    entry.Property(e => e.Items).IsModified = false;

    foreach (var navigationProperty in myTestClass.Test)
    {
           var entityEntry = context.Entry(navigationProperty);
           entityEntry.State = System.Data.Entity.EntityState.Modified;
           entityEntry.Property(navProp => navProp.SampleClassId).IsModified = false;
    }


    }
    context.SaveChanges();

Ich zog die Linie, wo Sie anbringen, das Objekt, das Sie gehen, um zu aktualisieren, über alles.

  • Ich verstehe nicht, warum die Menschen weiterhin herumzuspielen ändern der Entität Status manuell. Es muss etwas wirklich schlechtes tutorial gibt, dass die Menschen halten Sie nach. Ändern Sie einfach die Eigenschaften, die Sie ändern möchten, und rufen Sie SaveChanges EF kümmert sich um den rest. Mögliche Duplikate von How to update record mit Entity Framework 6?
  • Denn in vielen Fällen wird dies verhindern, dass ein round-trip-für die Datenbank. Es kann oder kann nicht gerechtfertigt werden, Es hängt davon ab.
InformationsquelleAutor user3654442 | 2016-06-17
Schreibe einen Kommentar