首页 文章

实体框架Linq更新数据不起作用

提问于
浏览
0

我想更新实体对象记录但它不显示异常,但它不更新记录 .

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

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

3 回答

  • 0

    你可以这样做:

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

    我认为问题是你在保存之前的 db.Issue_Detail.Attach(issue); 电话......

    DbSet.Attach

    请注意,已处于某种其他状态的上下文中的实体的状态将设置为“未更改”

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

  • 1

    如果要更新现有记录,最简单的方法是首先从数据库中检索项目,然后更新值 .

    来自您代码中的相关部分(下面未经测试的代码):

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

相关问题