Entity framework 在实体框架中更新-未刷新以下对象,因为在存储中找不到它们

Entity framework 在实体框架中更新-未刷新以下对象,因为在存储中找不到它们,entity-framework,Entity Framework,我正在使用以下代码保存订单对象: 当它是一个新的订单,并且我只是插入到数据库中时,它工作得很好。 但是,如果我试图更新现有订单,我会得到他的错误: 以下对象尚未刷新,因为它们未被刷新 在商店中找到:'EntitySet=Orders;OrderID=0' 在数据库中,Order表如下所示 OrderID | OrderNumber 13 567-87 15 567-93 其中OrderID是一个标识键。除这两行之外,没有其他行,因为它们已被删除 无法更新记录是我做

我正在使用以下代码保存订单对象:

当它是一个新的订单,并且我只是插入到数据库中时,它工作得很好。 但是,如果我试图更新现有订单,我会得到他的错误:

以下对象尚未刷新,因为它们未被刷新 在商店中找到:'EntitySet=Orders;OrderID=0'

在数据库中,Order表如下所示

OrderID | OrderNumber
13        567-87
15        567-93
其中OrderID是一个标识键。除这两行之外,没有其他行,因为它们已被删除


无法更新记录是我做错了什么?

看起来您出现了错误,因为您正在附加您创建的新
Order
对象,就像它是一个已经存在的
Order
一样-这就是为什么错误中的
OrderID
为零

试试这个:

try
{
    //// Update
    var existingOrder = se.Orders.FirstOrDefault(e => e.OrderNumber == orderNo);

    if (existingOrder != default(Order))
    {
        existingOrder.DateLastUpdated = DateTime.Now;
        se.ObjectStateManager.ChangeObjectState(existingOrder, EntityState.Modified);
    }
    //// Create
    else
    {
        se.Orders.AddObject(order);
    }
    se.SaveChanges();
}
编辑


您可以按属性更新order details属性,或者如果您的
订单
(或者
OrderViewModel
)包含要更新的详细信息,您可以使用类似的方法为您复制值。

谢谢。我不再收到错误,但仍无法更新。你能举一个例子吗?//以某种方式更新现有订单…(比如,将订单号更改为其他内容)?我试过
existingOrder=order但这不起作用。但是,类似于
existingOrder.OrderNumber=“543-88”工作。如果我使用的不仅仅是OrderNumber,还有没有更简单的方法可以让我不必检查每个字段?再次感谢!虽然目前对象中没有太多属性,但我可能会选择Automapper路线,以防将来需求发生变化。
try
{
    //// Update
    var existingOrder = se.Orders.FirstOrDefault(e => e.OrderNumber == orderNo);

    if (existingOrder != default(Order))
    {
        existingOrder.DateLastUpdated = DateTime.Now;
        se.ObjectStateManager.ChangeObjectState(existingOrder, EntityState.Modified);
    }
    //// Create
    else
    {
        se.Orders.AddObject(order);
    }
    se.SaveChanges();
}