2017-06-02 5 views
0

エンティティオブジェクトレコードを更新したいが、例外は表示されませんが、レコードは更新されません。以前、それはユーザーの更新データの後に、それはEntity Framework Linq更新データが機能しない

public Boolean bookReturnedUpdate(Issue_Detail issue) 
    { 

     BookController bookController = new BookController(); 
     int bookID = (int) issue.book_id; 
     Book_Detail book = bookController.findByBookID(bookID); 
     int noOfCopies = (int) book.no_of_copies; 

     book.no_of_copies = ++noOfCopies; 
     Console.Write("just before the update"); 
     bookController.updateBook(book); 

     Console.WriteLine("Issue ID" +issue.issue_id); 
     Boolean status = false; 
     try 
     { 
      using (var db = new ModelDB()) 
      { 



       DateTime issueD = (DateTime) issue.return_date; 
       Console.WriteLine("Details " + issueD); // here I can see the date is update and it contains the new date I have inserted 

       db.Entry(issue).State = EntityState.Modified; 

       db.Issue_Detail.Attach(issue); 

       db.SaveChanges(); // this returns 0 when I have checked wit h Console.WriteLine 

       status = true; 

      } 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine("Book return update error " + ex.InnerException); 
     } 
     return status; 
    } 

以下のメソッドを呼び出します。しかし、更新がそのまま、それはまだ古いヌルレコードまま行われた後、NULL値が含まれていobjetct issue_detailで

enter image description here

ありがとうございます。

は、私は誰もが、最も簡単な既存のレコードを更新する場合は、以下のGithubリンク https://github.com/ccmcwolf/LibraryManagementSystem

+0

なぜあなたは 'db.Issue_Detail.Attach(問題を)呼んでいる;'後の 'db.Entry(問題).State = EntityState.Modified;'? – grek40

+0

私はdb.SaceChanges()を追加しようとしましたが、その理由はありません。それを追加しようとしましたが –

答えて

1

あなたはこのようにそれを行うことができます。

dbContext.Issue_Detail.Attach(issue); 
var entry = dbContext.Entry(issue); 
entry.State = EntityState.Modified; 
db.SaveChanges(); 
+0

ありがとうございます。 –

+0

@ChamithChathuka、それを知ってうれしい! –

0

を確認してください完全なリポジトリが必要な場合は、単にdb.SaveChanges()、それはまた

を動作しませんでした試してみました最初にデータベースからアイテムを取得し、次に値を更新することです。あなたのコード内の関連する部分(以下未テストコード)から

using (var db = new ModelDB()) 
{ 

    var entity = db.Issue_Detail.FirstOrDefault(i => i.issue_id == (int)issue.issue_id); 
    if (entity == null) 
    { 
     //handle error: 
     throw new Exception("Issue not found"); 
    } 
    //here we update the properties: 
    db.Entry(entity).CurrentValues.SetValues(issue); 
    db.SaveChanges(); 

    status = true; 
} 
+0

ですが、book_idはIssue_detailテーブルの主キーではなく、エラーを返します。 issue.issue_id(Issue_detailテーブルの主要なキー) –

+0

私のコードを更新して、上記を試してください。 – JanR

1

私は、問題は右保存する前に、あなたのdb.Issue_Detail.Attach(issue);コールだと思う...

DbSet.Attach

注意既に他の状態でコンテキスト内にあるエンティティは、状態がUnchangedに設定されます

これはあなたがそれを設定した直後にあなたのState = Modifiedを失うことを意味します。

関連する問題