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

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

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

但更新完成后,它仍然保持原来的空记录。 在这里输入图像描述

谢谢。

我试过只是db.SaveChanges()它也没有工作

如果有人需要完整的存储库,请检查以下Github链接https://github.com/ccmcwolf/LibraryManagementSystem


你可以这样做:

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

我认为这个问题是你的db.Issue_Detail.Attach(issue); 在保存之前调用...

DbSet.Attach

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

这意味着你在设置之后会失去你的State = Modified


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

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

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;
}
链接地址: http://www.djcxy.com/p/33587.html

上一篇: Entity Framework Linq update data not working

下一篇: Entity Framework update virtual property directly without creating new record