2009-08-14 67 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(); 
}