2017-10-12 16 views
0

グリッド内のレコードを編集する機能があり、このグリッドのデータがデータベースから取得され、1つの列のみが編集可能です。編集したレコードに基づいて自分のデータベースでこのレコードを編集しようとすると、私がユニークキーに違反しているというエラーが表示されます。編集可能な列は一意でもキーでもなく、BinLocation_Item itemの値はデータベースの値と一致します。DbUpdateExceptionユニークキーの違反

編集:この問題の原因となっているWHERE BatchId IS NULLではなく、を使用してアプリケーションを削除しようとしているようです。

エラー:

System.Data.Entity.Infrastructure.DbUpdateException: 'An error occurred while updating the entries. See the inner exception for details.'

SqlException: Violation of UNIQUE KEY constraint 'UC_BIB'. Cannot insert duplicate key in object 'dbo.BinLocation_Item'. The duplicate key value is (3, 9642, NULL).

コード:

public ActionResult submitLocItem(BinLocationItemModel lines, int? PID, int? LineNum) 
{ 
    dbEntity.Configuration.ProxyCreationEnabled = false;  
    BinLocation_Item item = dbEntity.BinLocation_Item.Where(i => i.BinLocationId == lines.BinLocationId && i.ItemId == lines.ItemId && i.BatchId == lines.BatchID).FirstOrDefault(); 
    PickListLine picklistline = dbEntity.PickListLine.Where(i => i.PickID == PID && i.LineNum == LineNum).FirstOrDefault(); 

    picklistline.PickedQuantity = picklistline.PickedQuantity + lines.PickedStock; 

    item.StockAvailable = lines.StockAvailable - lines.PickedStock; 
    dbEntity.Entry(item).State = System.Data.Entity.EntityState.Modified; 
    dbEntity.SaveChanges(); 

    return View(); 
} 
+2

このエラーは、データベースに存在する主キーと同じ主キーを持つ項目を追加しようとしていることを示しています。また、重複するキー値(3,9642、NULL)も表示されます。 – gh9

+0

私は新しいレコードを挿入するのではなく、レコードを更新しようとしていますが、現時点で私のコードが新しい行を挿入しようとしているようです。どのようにして私の記録を正しく更新することができますか? – Alim

+1

3つの列に対して一意のキーが定義されているので、このエラーが発生していると思います。これらの列には値が「3.3642、NULL」の組み合わせがあり、更新操作の一部として更新された行は同じ値それらの列の組み合わせ。 –

答えて

0

、これにトリックを自分のコードを変更しなかった最初のエントリを削除して、値がnullのときにそれを追加します。