Generated Controllers: BooksControllers.cs


Other than the default controller , EF (Entity Framework) Core automatically generates another controller as follows:


C:\ASP.NET-workspace\BookStore1\Controllers\BooksController.cs
 using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Threading.Tasks;
 using Microsoft.AspNetCore.Mvc;
 using Microsoft.AspNetCore.Mvc.Rendering;
 using Microsoft.EntityFrameworkCore;
 using BookStore1.Data;
 using BookStore1.Models;

 namespace BookStore1.Controllers {
   public class BooksController : Controller {
     private readonly BookStore1Context _context;
     public BooksController( BookStore1Context context ) { _context = context; }

     // GET: Books
     public async Task<IActionResult> Index( ) {
       return View( await _context.Book.ToListAsync( ) );
     }

     // GET: Books/Details/5
     public async Task<IActionResult> Details( int? id ) {
       if ( id == null ) { return NotFound( ); }
       var book = await _context.Book.FirstOrDefaultAsync( m => m.Id == id );
       if ( book == null ) { return NotFound( ); }
       return View( book );
     }

     // GET: Books/Create
     public IActionResult Create( ) { return View( ); }

     // POST: Books/Create
     // To protect from overposting attacks,
     //   enable the specific properties you want to bind to.
     // For more details, see https://go.microsoft.com/fwlink/?LinkId=317598.
     [ HttpPost ]
     [ ValidateAntiForgeryToken ]
     public async Task<IActionResult> Create(
         [ Bind( "Id, Title, Genre, Price, PublishDate" ) ] Book book ) {
       if ( ModelState.IsValid ) {
         _context.Add( book );
         await _context.SaveChangesAsync( );
         return RedirectToAction( nameof( Index ) );
       }
       return View( book );
     }

     // GET: Books/Edit/5
     public async Task<IActionResult> Edit( int? id ) {
       if ( id == null ) { return NotFound( ); }
       var book = await _context.Book.FindAsync( id );
       if ( book == null ) { return NotFound( ); }
       return View( book );
     }

     // POST: Books/Edit/5
     // To protect from overposting attacks,
     //   enable the specific properties you want to bind to.
     // For more details, see https://go.microsoft.com/fwlink/?LinkId=317598.
     [ HttpPost ]
     [ ValidateAntiForgeryToken ]
     public async Task<IActionResult> Edit( int id,
         [ Bind( "Id, Title, Genre, Price, PublishDate" ) ] Book book ) {
       if ( id != book.Id ) { return NotFound( ); }
       if ( ModelState.IsValid ) {
         try {
           _context.Update( book );
           await _context.SaveChangesAsync( );
         }
         catch ( DbUpdateConcurrencyException ) {
           if ( !BookExists( book.Id ) ) { return NotFound( ); }
           else { throw; }
         }
         return RedirectToAction( nameof( Index ) );
       }
       return View ( book );
     }

     // GET: Books/Delete/5
     public async Task<IActionResult> Delete( int? id ) {
       if ( id == null ) { return NotFound( ); }
       var book = await _context.Book.FirstOrDefaultAsync( m => m.Id == id );
       if ( book == null ) { return NotFound( ); }
       return View( book );
     }

     // POST: Books/Delete/5
     [ HttpPost, ActionName( "Delete" ) ]
     [ ValidateAntiForgeryToken ]
     public async Task<IActionResult> DeleteConfirmed( int id ) {
       var book = await _context.Book.FindAsync( id );
       if ( book != null ) { _context.Book.Remove( book ); }
       await _context.SaveChangesAsync( );
       return RedirectToAction( nameof( Index ) );
     }

     private bool BookExists( int id ) {
       return _context.Book.Any( e => e.Id == id );
     }
   }
 }