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