2011-11-23 119 views
1

這是一個相當簡單的問題:當有人在我的ASP.NET MVC項目中點擊「編輯計劃」時 - 他不編輯,但創建一個新的計劃。你可以在我的答案更清楚地看到它給我的qeustion這裏:How do I duplicate an object?爲什麼我無法將對象添加到數據庫? (mvc3)

現在我想要做同樣的事情到它的引用,我做了這樣的:

var featurePlans = db.FeaturePlanBaseSet.Where(f => f.PlanId == plan.Id).ToList(); 

db.PlanSet.AddObject(plan); 
db.SaveChanges(); 

for (var i = 0; i < featurePlans.Count(); i++) 
{ 
    featurePlans[i].Plan = plan; 
    db.FeaturePlanBaseSet.AddObject(featurePlans[i]); 
} 

計劃加入時,我做AddObject,但Feature不是。

我得到這個錯誤:

An object with the same key already exists in the ObjectStateManager. The existing object is in the Unchanged state.

我會很高興知道它爲什麼會發生。

回答

3

在添加FeaturePlanBaseSet後,您看不到您保存的內容。您需要最後撥打db.SaveChanges()才能保存所有更改。

編輯:它也出現,你正在從數據庫中讀取現有的FeaturePlanBaseSet記錄,然後將該記錄添加回來。下一行將檢索現有記錄。

var featurePlans = db.FeaturePlanBaseSet.Where(f => f.PlanId == plan.Id).ToList(); 

當您添加featurePlans[i]時,您將添加現有記錄。如果您打算添加新記錄,請按照以下步驟操作:

for (var i = 0; i < featurePlans.Count(); i++) 
{ 
    var featurePlan = new FeaturePlanBaseSet(); 
    featurePlan.Plan = plan; 
    ...set other properties 
    db.FeaturePlanBaseSet.AddObject(featurePlan); 
} 
相關問題