Entity Framework 6を​​使用してレコードを更新するにはどうすればいいですか? 質問する

Entity Framework 6を​​使用してレコードを更新するにはどうすればいいですか? 質問する

EF6 を使用してレコードを更新しようとしています。まずレコードを検索し、存在する場合は更新します。これが私のコードです:

var book = new Model.Book
{
    BookNumber =  _book.BookNumber,
    BookName = _book.BookName,
    BookTitle = _book.BookTitle,
};
using (var db = new MyContextDB())
{
    var result = db.Books.SingleOrDefault(b => b.BookNumber == bookNumber);
    if (result != null)
    {
        try
        {
            db.Books.Attach(book);
            db.Entry(book).State = EntityState.Modified;
            db.SaveChanges();
        }
        catch (Exception ex)
        {
            throw;
        }
    }
}

上記のコードを使用してレコードを更新しようとするたびに、次のエラーが発生します。

{System.Data.Entity.Infrastructure.DbUpdateConcurrencyException: ストアの更新、挿入、または削除ステートメントが予期しない行数 (0) に影響を与えました。エンティティがロードされてからエンティティが変更または削除された可能性があります。ObjectStateManager エントリを更新します

ベストアンサー1

レコードを更新しようとしています (これは、「既存のレコードの値を変更して保存し直す」という意味です)。したがって、オブジェクトを取得し、変更を加えて保存する必要があります。

using (var db = new MyContextDB())
{
    var result = db.Books.SingleOrDefault(b => b.BookNumber == bookNumber);
    if (result != null)
    {
        result.SomeValue = "Some new value";
        db.SaveChanges();
    }
}

おすすめ記事