次のコードを使用して Order オブジェクトを保存しています。
public void SaveOrder (string orderNo)
{
using (var se = new StoreEntities)
{
var order = new Order { OrderNumber = orderNo }
try
{
//// Update
if (se.Orders.Any(e => e.OrderNumber == orderNo))
{
se.Orders.Attach(order);
se.ObjectStateManager.ChangeObjectState(order, EntityState.Modified);
}
//// Create
else
{
se.Orders.AddObject(order);
}
se.SaveChanges();
}
catch (OptimisticConcurrencyException){
se.Refresh(RefreshMode.ClientWins, order);
se.SaveChanges();
}
}
}
これは、新しい注文であり、DB に挿入するだけの場合にうまく機能します。ただし、既存の注文を更新しようとすると、次のエラーが表示されます。
次のオブジェクトはストアで見つからなかったため、更新されていません: 'EntitySet=Orders;OrderID=0'。
データベースでは、Order テーブルは次のようになります。
OrderID | OrderNumber
13 567-87
15 567-93
ここで、OrderID は ID キーです。削除されているため、これら 2 つの行以外に行はありません。
レコードを更新できないのは何が悪いのですか?