2012-02-02 76 views
0

我有以下代碼:爲什麼EF試圖添加新記錄而不是編輯?

 var currentUser = (from i in _dbContext.Users 
          where i.FirstName == user.FirstName && i.LastName == user.LastName 
           && i.Title == user.Title && i.Company == user.Company 
          select i).FirstOrDefault(); 

         currentUser.Company = user.Company; 
         currentUser.CompanyUrl = user.CompanyUrl; 
         currentUser.Country = user.Country; 

         _dbContext.SaveChanges(); 

,但我得到一個錯誤

{「的UNIQUE KEY約束 'IX_Users' 衝突不能插入對象 'dbo.Users' 重複鍵。重複的鍵值是(A8,B8 ,C8)。\ r \ n該語句已終止。「}

所以,它說,EF嘗試添加新的記錄,而不是編輯電流。爲什麼?

+0

是這段代碼執行如何? – 2012-02-02 19:26:30

+0

public void RegisterUser(用戶用戶,字符串用戶名,字符串密碼) {/ *此代碼* /}然後調用此方法 – John 2012-02-02 19:32:01

回答

3

我認爲這個問題會結合usercurrentUser。它很可能會更新您的currentUser,但同時插入user。其原因可能是這樣的:

currentUser.Company = user.Company; 

如果公司有用戶導航屬性,如果你正在使用POCO模板,這都將Companyuser作爲新的實體連接上下文。

試試這個:

var currentUser = ...; 

var company = new Company { Id = user.Company.Id }; 
_dbContext.Companies.Attach(company); 

currentUser.Company = company; 
... 

_dbContext.SaveChanges(); 
+0

hm,可能是。但爲什麼以及如何檢查? – John 2012-02-02 20:37:53

+0

您不能將分離的實體與附加的組合在一起。 EF不允許由分離和附加實體組成的實體圖。如果你已經分離了'user',那麼你不能將其分離的'Company'分配給附加'currentUser'。它將使所有三個實體連接並保存。 – 2012-02-02 20:42:50

+0

是的,問題在其中。但真的不明白。我創建用戶作爲新的用戶(),它沒有附加到_dbContent.Also,所有這3個字段都是字符串。 – John 2012-02-02 20:59:05

相關問題