2016-04-26 128 views
0

一個新的記錄,我有以下型號EF:EF6將包括相關記錄

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; } 

我的問題

現在,我試圖插入一個新的User包括Profile。我怎樣才能同時插入UserProfile,並將兩個記錄「粘合」在一起?

回答

0

我不相信他們可以添加在一起,因爲當您創建用戶時,您的個人資料ID會生成。但你當然應該能夠做到這一點(在C#中,而不是測試)。

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的是更加簡潔,預期應該工作博客。 – dinotom

1

試試這個。

例如,如果你想插入一個班有兩個學生,創建 Class對象,學生對象,學生加入到班級的學生 集合類對象添加到上下文和調用的SaveChanges: 一切都將得到保存

有關添加多對多實體here

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

雖然此解決方案有效。這裏的OP將不會在用戶中分配UserProfile ID。 –

+0

我相信用戶配置文件ID已被分配到'userProfile',因爲它已經知道這個關係。如果我錯了,請糾正我。我在3個月前做過這樣的事情 – Eldho

+0

我嘗試了下面的代碼,也許我做了一些錯誤的事情,但是用戶和配置文件與其他人正確鏈接。但UserId和UserProfileId(如FK)保持爲'0'。你是否設置了一些使用流利或數據註釋的特定選項來實現這一目標? (如OP描述的一對一關係) –