2012-02-11 90 views
0

我試圖做我的盡職調查,並閱讀了很多這裏的問題,我無法解決我的問題。我有一個非常簡單的模式。我期待了一個get方法的記錄(用適當的WHERE子句,讓我感興趣的記錄):爲什麼我不能用dbContext更新記錄?

public IQueryable<TDataModel> Get<TDataModel>() where TDataModel : class, IDataModel 
{ 
    return _context.Set<TDataModel>(); 
} 

然後我修改無論該對象我感興趣的,然後我通過了修改後的性能反對的更新方法:

public TDataModel Update<TDataModel>(TDataModel item) where TDataModel : class, IDataModel 
{ 
    _context.Set<TDataModel>().Attach(item); 
    _context.Entry<TDataModel>(item).State = EntityState.Modified; 
    _context.SaveChanges(); 
    return item; 
} 

我總是擁有得天獨厚的以下內容:

與對象相同的密鑰已經存在於ObjectStateManager。 ObjectStateManager無法使用相同的 鍵追蹤多個對象。

我已經嘗試了許多解決方案中提出的很多這裏提出的問題無濟於事。

+1

何時發生錯誤?在'.Attach(item)'或'.SaveChanges'上? – 2012-02-11 15:34:22

+0

在.Attach(item) – TheHurt 2012-02-11 15:43:17

+1

我知道你可能已經通過了這個,但是你在查詢和'.Attach(item)'之間的相同數據上下文嗎? – 2012-02-11 15:44:50

回答

1

因爲實體框架使用更改跟蹤(默認情況下......但您可以使用不同的MergeOptions關閉它),所以不能使用相同的鍵(在相同的上下文中)附加兩個實體。

因此,您必須首先分離舊對象,或者簡單地不附加新對象(因爲更改跟蹤器已爲您執行此項工作)。

相關問題