ASP.NET MVC中的EDM问题

时间:2009-08-14 13:15:24

标签: 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下面发布了一个我不明白的可能解决方案。我希望这个编辑能够解决我的问题所以有人会看到并帮助我。对不起,如果不是这样的话。

3 个答案:

答案 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();
}