2016-04-26 10 views
0

Ich habe folgende EF-Modelle:EF6 Einfügen eines neuen Datensatzes einschließlich der entsprechenden Aufzeichnungen

User.cs

[Key] 
[DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
public Guid UserId { get; set; } 
public String UserName { get; set; } 
... 

public Guid UserProfileId { get; set; } 
public virtual UserProfile { get; set; } 

Profile.cs

[Key] 
[DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
public Guid ProfileId { get; set; } 

public String DisplayName { get; set; } 
... 

public Guid UserId { get; set; } 
public virtual User { get; set; } 

MyDbContext.cs

public DbSet<User> Users { get; set; } 
public DbSet<Profile> Profiles { get; set; } 

Meine Frage

Nun, ich versuche, eine neue User einschließlich eines Profile einzufügen. Wie kann ich sowohl die User als auch die Profile gleichzeitig einfügen und die beiden Datensätze zusammenkleben?

Antwort

0

Ich glaube nicht, dass sie zusammengefügt werden können, da Ihre Profil-ID beim Erstellen des Benutzers generiert wird. Aber Sie sollten das sicherlich können (in C# und nicht getestet).

private readonly User usr= new User 
    { 
     UserName = "JohnDoe", 
     Password = "janedoe" 
    } 

private readonly Profile profile = new Profile 
    { 
     MobileNumber = "9345555555", 
     Nickname = "janedoe", 
     UserId = null 
    } 
var db = new UserAndProfileContext(); 
     {     
      using (db) 
      { 
       var usr = new; 
       db.Users.Add(usr); 
       db.SaveChanges(); 
       profile.UserId = usr.Id; 
       db.Profiles.add(profile); 
       db.SaveChanges(); 
      } 
     } 
+0

@ Eldho der prägnanter ist das Hinzufügen und sollte wie erwartet funktionieren. – dinotom

1

Versuchen Sie es.

z. wenn Sie eine Klasse mit zwei Studenten einfügen möchten, erstellen Sie die Klasse Objekt, die Studenten Objekte, fügen Sie die Studenten in die Klasse Schüler Sammlung der Klasse Objekt den Kontext und Call Savechanges hinzufügen: Alles wird erhalten gespeichert

Ein Blog über viele, viele Einheiten here

using (var db = new DbContext()) 
{ 
    var user = new User 
    { 
     UserName = "UserName", 
     UserProfile = new UserProfile 
     { 
      DisplayName = "DisplayName", 
     } 
    }; 
    db.User.Add(user); 
    db.SaveChanges(); 
} 
+0

Während diese Lösung funktioniert. Das OP hier erhält keine UserProfile-ID in User zugewiesen. –

+0

Ich glaube, die Benutzerprofil-ID wurde 'userProfile' zugewiesen, da sie die Beziehung bereits kennt. Bitte korrigieren Sie mich, wenn ich falsch liege. Ich hatte so etwas vor 3 Monaten gemacht – Eldho

+0

Ich versuchte den Code unten und vielleicht habe ich etwas falsch gemacht, aber der Benutzer und das Profil sind richtig miteinander verbunden. aber UserId und UserProfileId (wie FK) bleiben bei '0'. Haben Sie einige spezielle Optionen gesetzt, um dies mit Hilfe von Fließkomma oder Datenannotation zu erreichen? (in einer 1: 1-Beziehung wie vom OP beschrieben) –

Verwandte Themen