【发布时间】:2017-03-17 08:41:47
【问题描述】:
不是重复的:我的 Update() 方法需要两个参数:id 和修改的实体,并且为我的问题提供的答案有不同的方法,例如 CurrentValues,现有问题中没有涉及。
我是 ASP.Net 核心开发的新手。我正在使用 MySql 作为数据库和 Book 模型构建一个简单的 API。
我的控制器如下所示:
[Route("api/[controller]")]
public class BooksController : Controller
{
private readonly IBookRepository _books;
public BooksController(IBookRepository books)
{
_books = books;
}
[HttpGet("")]
public IActionResult GetAllBooks()
{
try
{
List<Book> books = _books.GetAllBooks();
return Ok(books);
}
catch(EntityNotFoundException<Book>)
{
return NotFound();
}
}
[HttpGet("{id}")]
public IActionResult GetBook(long id)
{
Book book = _books.GetBook(id);
if (book == null)
{
return NotFound();
}
return Ok(book);
}
[HttpPost]
public IActionResult CreateBook([FromBody] Book book)
{
if (ModelState.IsValid == false)
{
return BadRequest(ModelState);
}
Book createdBook = _books.CreateBook(book);
if (createdBook == null)
{
return NotFound();
}
return CreatedAtAction(
nameof(GetBook), new { id = createdBook.Id }, createdBook);
}
[HttpPut("{id}")]
public IActionResult UpdateBook(long id, [FromBody] Book book)
{
if (ModelState.IsValid == false)
{
return BadRequest(ModelState);
}
try
{
_books.UpdateBook(id, book);
return Ok();
}
catch (EntityNotFoundException<Book>)
{
return NotFound();
}
}
[HttpDelete("{id}")]
public IActionResult DeleteBook(long id)
{
_books.DeleteBook(id);
return Ok();
}
}
和存储库如下:
public class BookRepository: IBookRepository
{
private readonly WebAPIDataContext _db;
public BookRepository(WebAPIDataContext db) {
_db = db;
}
public Book CreateBook(Book book) {
_db.Books.Add(book);
_db.SaveChanges();
return book;
}
public void DeleteBook(long id)
{
Book book = GetBook(id);
if (book != null) {
_db.Books.Remove(book);
_db.SaveChanges();
}
}
public List<Book> GetAllBooks()
{
return _db.Books.AsNoTracking().ToList();
}
public Book GetBook(long id)
{
return _db.Books.FirstOrDefault(o => o.Id == id);
}
public void UpdateBook(long id, Book book)
{
}
}
public interface IBookRepository
{
List<Book> GetAllBooks();
Book GetBook(long id);
Book CreateBook(Book book);
void UpdateBook(long id, Book book);
void DeleteBook(long id);
}
我不确定如何在我的 Repo 类中编写 UpdateBook 方法。有人可以帮我吗?我看到的所有教程都是在 UpdateBook() 方法中使用单个 id 参数,我基本上是在发布一个 json 对象以及实体 id。
【问题讨论】:
-
它并不完全重复,因为我的 Update 方法需要两个参数 wiz id 和修改后的 Entity,我没有找到任何可以像这样更新的教程或博客文章。我认为更新整个实体比一个一个更新它的所有属性更方便
-
其次,它说“可能重复”,如果您查看该帖子,它清楚地显示使用 id 从数据库中获取实体,然后从您要更新的属性中设置其属性,然后保存回来进入数据库。如果您发布一个 json 对象并不重要,在 dataAccess 级别/存储库层它只是一个 POCO 对象。
标签: asp.net-core asp.net-core-mvc entity-framework-core