Not a Duplicate: See the comment and answer to this question.
I am almost new to ASP.net Core development. I am building a sample web api with MySql as my database.
My Book model:
public class Book
    {   
        [Key]
        public long Id { get; set; }
        [Required]
        public string Name { get; set; }
        [Required]
        public string Author { get; set; }
        public DateTime CreatedOn { get; set; } = DateTime.UtcNow;
        public Book()
        {
        }
    }
    public class WebAPIDataContext : DbContext
    {
        public WebAPIDataContext(DbContextOptions<WebAPIDataContext> options)
            : base(options)
        {
        }
        public DbSet<Book> Books { get; set; }
    }
Book Repository:
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)
        {
            throw new NotImplementedException();
        }
    }
    public interface IBookRepository
    {
        List<Book> GetAllBooks();
        Book GetBook(long id);
        Book CreateBook(Book book);
        void UpdateBook(long id, Book book);
        void DeleteBook(long id);
    }
And Book controller:
[Route("api/[controller]")]
    public class BooksController : Controller
    {
        private readonly IBookRepository _books;
        [HttpGet("")]
        public IActionResult GetAllBooks()
        {
            List<Book> books = _books.GetAllBooks();
            return Ok(books);
        }
        [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);
            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();
        }
    }
When I do a POST request from Swagger to create a new book it gives me NullReferenceException error. What am I doing wrong?
 
    