2009-08-14 94 views
2

我有一個問題,這是非常類似這樣的問題:問題與EDM在ASP.NET MVC

Strongly-Typed ASP.NET MVC with Entity Framework

但對於這一問題的解決方案並不爲我工作。首先讓我說,我對這個問題不瞭解很多。

我有以下代碼

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Edit(PaymentInformation paymentInformationToEdit, int pensionFundID) 
{ 
var originalPaymentInformation = (from PIs in _db.PaymentInformation 
            where PIs.employeeNumber == paymentInformation.employeeNumber 
            select PIs).First(); 

var laborUnion = (from LUs in _db.LaborUnion 
        where LUs.laborUnionID = laborUnionID 
        select LUs)First(); 
paymentInformationToEdit.laborUnion = laborUnion; 

_db.ApplyProperyChanges(originalPaymentInformation.EntityKey.EntitySetName, paymentInformationToEdit); 
_db.SaveChanges(); 
} 

我得到一個錯誤,當我嘗試了ApplyProperyChanges說「在ObjectContext中現有的對象是在增加的狀態。只有在現有對象處於未更改或已修改狀態時才能應用更改'。

我不知道如何改變狀態,或者即使我正在做一些根本性的錯誤。請指教。

編輯:我希望這是在這裏的方式去在stackoverflow。我沒有得到解決我的問題的答案,但Gregoire發佈了一個我不明白的可能解決方案。我希望這個編輯能夠碰到我的問題,這樣有人會看到它並幫助我。對不起,如果這不是路要走。

回答

0

您需要paymentInformationToEdit的一個更新originalPaymentInformation的信息,然後ApplyProperyChanges上originalPaymentInformation

+0

我不知道我的理解。我試過: originalPaymentInformation.Employee = paymentInformationToEdit.Employee; 但這只是給我一個錯誤,說'發生了參照完整性約束違規。當對象具有非臨時密鑰時,屬於參照完整性約束的屬性無法更改'。 我誤解了你的答案? – Mannsi 2009-08-15 09:15:07

0

一個實體的狀態發生變化時對其進行修改。它必須處於分離狀態。如果您修改關係,它將進入添加狀態。這意味着在應用更改之前,您無法編輯laborUnion關係。但是,我無法弄清楚如何在沒有框架自動添加新實體的情況下改變關係,這與保存關係完全相同。希望能幫助你。

0

這是因爲你不能在數據模式下編輯引用。對象應該具有ObjectContext才能進行該更改。 解決方案你的問題是更新oryginal對象和休息參考 - 「靜」 - 由ApplyProperyChanges領域:

 
public ActionResult Edit(PaymentInformation paymentInformationToEdit, int pensionFundID) 
{ 
var originalPaymentInformation = (from PIs in _db.PaymentInformation 
            where PIs.employeeNumber == paymentInformation.employeeNumber 
            select PIs).First(); 

var laborUnion = (from LUs in _db.LaborUnion 
        where LUs.laborUnionID = laborUnionID 
        select LUs)First(); 
originalPaymentInformation.laborUnion = laborUnion; 

_db.ApplyProperyChanges(originalPaymentInformation.EntityKey.EntitySetName, paymentInformationToEdit); 
_db.SaveChanges(); 
}