Like Renat said, remove: db.Books.Attach(book);
Also, change your result query to use "AsNoTracking", because this query is throwing off entity framework's model state. It thinks "result" is the book to track now and you don't want that.
var result = db.Books.AsNoTracking().SingleOrDefault(b => b.BookNumber == bookNumber);