Hinzufügen eines erforderlichen Fremdschlüssels

Ich habe einen "Schüler" Tisch. Ich möchte die Tatsache hinzufügen, dass die Schüler Taschen haben, die Elemente enthalten:

Students: | Id | Name | BagId | |----|--------|-------| | 0 | Josh | 0 | | 1 | Emma | 2 | Bags: | Id | |----| | 0 | | 1 | | 2 | Items: | BagId | Item | |-------|---------| | 0 | Banana | | 0 | Apple | | 1 | Pen | | 1 | Tissue | | 2 | Gun | 

Ich brauche den "Taschen" Tisch und BagId's, weil ich andere Entitäten als Schüler in der Lage sein werde, eine Tasche zu haben (aber wenn du eine bessere Idee hast, bin ich alle Ohren).

Mein Problem:

  • Ich habe noch nicht die Students.BagId Spalte
  • Ich möchte, dass es sich um einen nicht null Fremdschlüssel handelt
  • Ich habe schon viele Studenten
  • Der Beuteltisch ist nicht besetzt

=> Wie kann ich den Beuteltisch bevölkern und jedem Schüler zwischen der Erstellung der Spalte Student.BagId und der Anwendung der Fremdschlüssel-Einschränkung einen BagId geben? (Ich brauche nicht, um die Items-Tabelle zu bevölkern, alle Beutel sind anfangs leer)

Ich habe Sachen ausprobiert

 UPDATE Students SET BagId = t.Id FROM ( INSERT INTO Bags DEFAULT VALUES OUTPUT INSERTED) as t 

ohne Erfolg.

Ich benutze Entity Framework 6 und ich möchte das alles in einer Migration machen.

Angenommen, es gibt keine data in der Beuteltabelle noch und Sie können ein benutzerdefiniertes SQL-Skript schreiben, können Sie etwas entlang der Linien von tun

 DECLARE @Temp TABLE( StudentId INT, BagId INT IDENTITY(1,1)) INSERT INTO @Temp( StudentId )( Select Id from Students ) SET IDENTITY_INSERT Bags ON INSERT INTO Bags( Id )( Select BagId From @Temp ) SET IDENTITY_INSERT Bags OFF UPDATE Students Set BagId = T.BagId FROM Students S INNER JOIN @Temp T on T.StudentId = S.Id --just to show results Select * from Students Select * from Bags