2013-07-04 82 views
0

我有這種情況創建新記錄時它也重新創建它的關聯。實體框架重新創建新記錄

User newUser = new User(); 
newUser.UserGroupID = 1; 
newUser.UserGroup = UserGroup.Find(1); 

using (InventorySystemEntities context = new InventorySystemEntities(new ConfigurationManager().ConnectionString)) 
{ 
    context.Users.Add(newUser); 
    context.SaveChanges(); 
} 

當我保存它時,它創建一個新的用戶記錄,所以是一個新的UserGroup記錄。

+2

只是一個便箋 - 你不必設置UserGroup和UserGroupId - 兩者之一就足夠了 - EF將處理它。 – TGlatzer

回答

0

這是同樣的問題,因爲在this question。對Find和SaveChanges使用相同的上下文,或者,如果由於某種原因無法完成此操作,請使用Attach()將找到的UserGroup附加到新的上下文。

1

您對UserGroup.Find()和Users.Add()使用不同的上下文,這是不好的 - 兩個使用相同的上下文,它會正常工作。

using (InventorySystemEntities context = new InventorySystemEntities(new ConfigurationManager().ConnectionString)) 
{ 
    var newUser = new context.Users.CreateNew(); 
    newUser.UserGroup = context.UserGroup.Find(1); 

    context.Users.Add(newUser); 
    context.SaveChanges(); 
} 
0

你需要告訴你的實體是一個現有實體上下文:

User newUser = new User(); 
newUser.UserGroupID = 1; 
newUser.UserGroup = UserGroup.Find(1); 

using (InventorySystemEntities context = new InventorySystemEntities(new ConfigurationManager().ConnectionString)) 
{ 
    context.UserGroups.Attach(newUser.UserGroup); 
    context.Users.Add(newUser); 
    context.SaveChanges(); 
} 
相關問題