2017-06-02 4 views
0

Ich möchte den Entitätsobjektdatensatz aktualisieren, aber es zeigt keine Ausnahme, aber es aktualisiert den Datensatz nicht.Entity Framework Linq Updatedaten funktionieren nicht

in issue_detail objetct es zuvor einen Nullwert enthält, nach Benutzerdaten aktualisieren sie die unten stehende Methode aufrufen

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; 
    } 

Aber nach dem Update es bleibt noch zu tun ist, das alte Null-Verzeichnis, wie es ist. enter image description here

Vielen Dank.

Ich habe gerade db.SaveChanges() versucht, es hat auch nicht

arbeiten

Wenn jemand die vollständige Repository benötigen Sie https://github.com/ccmcwolf/LibraryManagementSystem

+0

Warum Sie 'db.Issue_Detail.Attach (Ausgabe) fordern;' 'nach db.Entry (Ausgabe) .State = EntityState.Modified;'? – grek40

+0

Ich habe versucht, nur db.SaceChanges() hinzufügen, es hat nicht funktioniert, deshalb habe versucht, das zu –

Antwort

1

Sie können es wie folgt tun:

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

Es hat funktioniert Danke. –

+0

@ChamithChathuka, Schön das zu wissen! –

0

die folgende Github Verbindung überprüfen Wenn Sie einen vorhandenen Datensatz aktualisieren, die am einfachsten Die Methode besteht darin, zuerst das Element aus der Datenbank abzurufen und dann die Werte zu aktualisieren.

aus dem entsprechenden Teil in Ihrem Code (unten ungetesteten Code):

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

hinzufügen, aber das Problem ist book_id ist nicht der Primärschlüssel der Tabelle Issue_detail und dann gibt es eine Fehler Ausnahme, wenn ich versucht habe mit der issue.issue_id (welches das primäre Kiey der Issue_detail-Tabelle ist) –

+0

Mein Code wurde aktualisiert. – JanR

1

denke ich, das Problem Recht db.Issue_Detail.Attach(issue); Anruf vor dem Speichern ...

DbSet.Attach

Hinweis Für Entitäten, die sich bereits in einem anderen Status im Kontext befinden, wird der Status auf Unverändert gesetzt

Das bedeutet, Sie verlieren Ihre State = Modified direkt nach dem Einstellen.

Verwandte Themen