实体框架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