2017-06-02 160 views
0

我想更新实体对象记录,但它不显示异常但它不更新记录。实体框架Linq更新数据不起作用

在objetct以前它包含空值issue_detail,之后用户更新数据调用下面的方法

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

但更新完成后它仍然保留旧的零记录,因为它是。 enter image description here

谢谢。

我已经尝试过db.SaveChanges()也没有人若需要完整的资料库,请检查下面的链接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

如果要更新现有的记录,最简单的工作

方法是首先从数据库检索项目,然后更新值。

从代码中的相关部分(以下未测试的代码):

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表的主要kiey) –

+0

更新我的代码,请尝试上面的代码。 – JanR

1

我认为这个问题是您db.Issue_Detail.Attach(issue);呼叫权限保存前...

DbSet.Attach

注在某些其他状态中已处于上下文中的实体将其状态设置为未更改

这意味着您在设置后会丢失State = Modified