2016-12-12 4 views
0

Ich benutze Entity Framework 6 (Code First). Ich habe eine Klasse:Entity Framework Update verschachtelte Liste

public class DialogSession {...} 

Und eine andere Klasse mit einer Liste von DialogSession Objekten:

public class DialogUser 
{ 
    public int Id { get; set; } 
    public List<DialogSession> DialogSessions { get; set; } 
} 

I DialogSession Objekt zu der Liste hinzufügen und dann context.SaveChanges() ausführen wie folgt:

dialogUser.DialogSessions.Add(dialogSession); 
context.SaveChanges(); 

Aber der Fremdschlüssel des dialogSession Datensatzes ist noch Null:

enter image description here

Ich habe versucht, im Web viele Methoden wie das aber withoyt Erfolg folgt:

context.DialogUsers.Attach(dialogUser); 
context.Entry(dialogUser).State = EntityState.Modified; 
context.SaveChangesExtention(); 

Wer weiß, wie innere Objekte zu speichern (wie die Liste) in der Datenbank Entity Framework (6)?

+0

Above Code zurück an ihre Mutter verweist hat keine Beziehung zwischen 'DialogSession' und 'DialogUser.Id' gezeigt –

Antwort

1

Aus Ihrer Frage ist nicht klar, welche Beziehungstyp Sie haben, also denke ich, Sie haben One-to-Many und so etwas wie dies sollte Werke:

public class DialogSession 
{ 
    public int DialogSessionId { get; set; } 
    public virtual DialogUser DialogUser { get; set; } 
} 

public class DialogUser 
{ 
    public int DialogUserId { get; set; } 
    public virtual ICollection<DialogSession> DialogSessions { get; set; } 
} 

sehen Beispiel nehmen, wie man richtig diese Art von Beziehung in dieserkonfigurieren.

0

Wenn ich nicht falsch bin, sollten Sie

dialogUser.DialogSessions.Add(dialogSession); 
context.Entry(dialogUser).State = EntityState.Modified; 
context.SaveChanges(); 

hinzufügen Dies wird die Einheit markieren, wie geändert, und dann sollten die Änderungen auf der db widerspiegeln.

Dies als

modifiziert ein effizienter durch Markierung singulären Eigenschaften getan werden könnte, es
dialogUser.DialogSessions.Add(dialogSession); 
context.Entry(dialogUser).Property(u => u.dialogSession).IsModified = true; 
context.SaveChanges(); 

Probieren Sie :)

+0

Leider funktioniert es nicht – Jacob

+0

Yup, wegen dem @ja –

+0

Kann meinen Kommentar nicht bearbeiten -.- Aber ja, wegen dem, was @Jacob in seiner Antwort erklärt –

Verwandte Themen