我有一个与此问题非常相似的问题:
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 :(得分:0)
您需要使用paymentInformationToEdit更新originalPaymentInformation的信息,然后在originalPaymentInformation上更新ApplyProperyChanges
答案 1 :(得分:0)
修改实体状态时会发生更改。它必须处于分离状态。如果修改关系,它将进入添加状态。这意味着在应用更改之前无法编辑laborUnion关系。但是,我无法弄清楚如何在没有框架自动添加新实体的情况下更改关系,这与保存关系完全相同。希望能帮到你。
答案 2 :(得分:0)
这是因为您无法在数据模式下编辑引用。对象应该具有ObjectContext才能进行该更改。 您的问题的解决方案是更新oryginal对象中的引用和rest - “静态” - 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(); }