2017-10-18 2 views
1

Ich benutze Entity Framework.So fügen Sie ein vorhandenes Kind zu einem neuen Elternteil hinzu

Mein Modell ist wie folgt:

Gruppe: ID, Name

Benutzer: ID, Name, GroupID. Die Situation ist dies: Ich habe einen Benutzer (Benutzer1), der kein Mitglied einer Gruppe ist.

Ich erstelle eine neue Gruppe und möchte diesen Benutzer zu dieser neuen Gruppe hinzufügen.

Ich habe diesen Code:

Dim grp1 as new Group 
grp1.name="Students" 
context.Groups.Add(grp1) 
context.savechanges() 
usr1.GroupID=grp1.ID 
context.savechanges() 

Dieser Code funktioniert, aber ich habe zweimal die Savechanges aufgerufen. Gibt es eine Möglichkeit, das vorhandene usr1 an die untergeordnete Sammlung von grp1 anzuhängen und danach Savechanges nur einmal aufzurufen?

Vielen Dank!

+0

Haben Sie versucht, das Entfernen der ersten context.SaveChanges() (Blog siehe Beispiele)? Ich denke, die beiden Add() 's funktionieren immer noch richtig. – Kokombads

+0

Wenn Sie den 'User' zur' Users'-Sammlung dieser 'Gruppe' hinzufügen wollen, dann würden Sie das tun:' grp1.Users.Add (usr1) '. – jmcilhinney

+0

@jmcilhinney aber usr1 existiert, und ist kein neues Objekt. – Adriano

Antwort

0

Wenn usr1 eine verfolgte Entität ist, können Sie die Gruppe der Navigationseigenschaft Group des Benutzers hinzufügen, anstatt zu versuchen, die ID zu verwenden.

Dim grp1 as new Group 
grp1.name="Students" 
usr1.Group=grp1 
context.savechanges() 

https://msdn.microsoft.com/en-us/library/jj713564(v=vs.113).aspx

Durch ein neues Objekt zu einer Navigations Eigenschaft zuweisen. Der folgende Code erstellt eine Beziehung zwischen einem Kurs und einer Abteilung. Wenn die Objekte an den Kontext angehängt sind, wird der Kurs auch zur Abteilung .Courses hinzugefügt, und die entsprechende Fremdschlüsseleigenschaft auf dem Kursobjekt wird auf den Schlüsseleigenschaftswert der -Abteilung festgelegt. Kurs. Abteilung = Abteilung;

https://msdn.microsoft.com/en-us/library/jj592676(v=vs.113).aspx

using (var context = new BloggingContext()) 
{ 
    // Add a new User by setting a reference from a tracked Blog 
    var blog = context.Blogs.Find(1); 
    blog.Owner = new User { UserName = "johndoe1987" }; 

    context.SaveChanges(); 
} 
Verwandte Themen