2016-09-17 43 views
3

我有下面的类,它使用实体框架来运行其任务编辑方法

仓储类

public class LibraryRepository 
{ 
    LibraryContext context = new LibraryContext(); 

    public void EditBook(Book book) 
    { 
     context.Entry(book).State = System.Data.Entity.EntityState.Modified; 
    } 
} 

所以我想用这个EditBook我的方法Web API

Web API控制器类

public class BooksWebAPIController : ApiController 
{ 
     private LibraryRepository db = new LibraryRepository(); 

     [ResponseType(typeof(void))] 
     public IHttpActionResult PutBook(int id, Book book) 
     { 
      if (!ModelState.IsValid) 
      { 
       return BadRequest(ModelState); 
      } 

      if (id != book.Book_Id) 
      { 
       return BadRequest(); 
      } 

      db.EditBook(book); 

      return StatusCode(HttpStatusCode.NoContent); 
     } 
} 

我想上面的Web API使用MVC项目EditBook URL(如我的客户层) 所以我已经创建了MVC项目的Model文件夹中的客户端类像下面

LibraryClient类

public class LibraryClient 
{ 
    private string BOOK_URL = "http://localhost:13793/api/Books"; 

    public bool Edit(Book book) 
    { 
     try 
     { 
      HttpClient client = new HttpClient(); 
      client.BaseAddress = new Uri(BOOK_URL); 
      client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 
      HttpResponseMessage response = client.PutAsJsonAsync("Books/" + book.Book_Id, book).Result; 

      return response.IsSuccessStatusCode; 
     } 
     catch 
     { 
      return false; 
     } 

    } 
} 

然后在MVC项目的Controller文件夹我已经创建了下面的类和控制器与前端交互

BooksController中类

public class BooksController : Controller 
{ 
    [HttpGet] 
    public ActionResult Edit(int id) 
    { 
     LibraryClient lc = new LibraryClient(); 
     Book book = new Book(); 
     book = lc.GetBook(id); 

     return View("Edit", book); 
    } 

    [HttpPost] 
    public ActionResult Edit(Book book) 
    { 
     LibraryClient pc = new LibraryClient(); 
     pc.Edit(book); 
     return RedirectToAction("BookswithAuthers", "BookWithAuther"); 
    } 
} 

但在这里,这是编译没有任何错误,当我选择一本书编辑其获取正确的书,但一旦我做它的变化和命中保存其不节能更新详情,我的方法有什么问题。

方法View,CreateDelete创建类似这种方法工作正常。唯一的问题是这个Edit方法

+0

@jimpaine其实我是婴儿这个Web API技术,仍然学习阶段,你能建议我能在这里做什么 – kez

+2

你是否在任何地方调用'context.SaveChanges()'?如果没有,在'context.Entry(book).State = System.Data.Entity.EntityState.Modified;' – Developer

+0

@Developer之后调用它不,我不应该吗? – kez

回答

3

你是否在任何地方拨打context.SaveChanges()?如果没有,请在context.Entry(book).State = System.Data.Entity.EntityState.Modified;之后致电。