Asp.NET MVC でアプリを作成してみた【Complete Tutorial】

## ASP.NET MVC Application の作成
① プロジェクトの作成する
```
dotnet new mvc　[--name <プロジェクト名>] [--output <出力ディレクトリ>] [--framework <フレームワーク>]

・name オプション: プロジェクトの名前を指定
・output オプション: プロジェクトの出力ディレクトリを指定
・framework オプション: プロジェクトのターゲット フレームワークを指定

dotnet run
```
## data-drivenを作成する

①　ModelsにBooksEntity.csを作成する

```Models/BooksEntity.cs
namespace AmazonBooks.Models;

public class BooksEntity{

    public int Id{get; set;}
    public string Title{get; set;}

    public int Author{get; set;}
    public string ISBN{get; set;}
}
```
② DataファイルとApplicationDbContext.csを作成する

```Data/ApplicationDbContext.cs
namespace AmazonBooks.Data;
using AmazonBooks.Models;
using Microsoft.EntityFrameworkCore;
var builder = WebApplication.CreateBuilder(args);

public class ApplicationDbContext:DbCotext
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options):base(options){
}
public DbSet<BooksEntity> Books {get; set;}
}
```
③ appsettings.jsonにコードを追加する

```appsettings.json
"ConnectionStrings":{
  "DefaultConnection":"SQL サーバー名"
},

```


④ Program.csを編集する

```Program.cs
using AmazonBooks.Data;
using AmazonBooks.Models;
using Microsoft.EntityFrameworkCore;

//省略

builder.Services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConneciton")));
```

⑤ Entity Framework Core を使用してデータベースにマイグレーションを追加する

```
dotnet ef migrations add <マイグレーション名>
```
⑥　ControllersにHomeController.csを編集する

```Controllers/HomeController.cs
using System.Diagnostics;
using Microsoft.AspNetCore.Mvc;
using AmazonBooks.Models;

namespace AmazonBooks.Controllers;

public class HomeController : Controller
{
    private readonly ILogger<HomeController> _logger;

    public HomeController(ILogger<HomeController> logger)
    {
        _logger = logger;
    }

    public IActionResult Index()
    {
        return View();
    }

    public IActionResult Privacy()
    {
        return View();
    }

    [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
    public IActionResult Error()
    {
        return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
    }
}

```

⑦ ControllersにBookController.csを作成する

```Controllers/BookController.cs
using System.Diagnostics;
using Microsoft.AspNetCore.Mvc;
using AmazonBooks.Models;
using AmazonBooks.Data;

namespace AmazonBooks.Controllers;

public class BookController : Controller
{
    private ApplicationDbContext_db

    public BookController(ApplicationDbContext db)
    {
        _db = db;
    }
    public IActionResult Index()
    {
        var books=_db.Books.ToList();
        return View();
    }
    public IActionResult Create()
    {
        return View();
    }
    [HttpPost]
     public IActionResult CreateBoot(BooksEntity book)
    {
         _db.books.Add(book);
         _db.SaveChanges();

         return RedirectToAction("Index");
    }

}
```
⑦ ViewsにBooksファイルにIndex.cshtmlを作成する

```Views/Books/Index.cshtml
using System.Diagnostics;
using Microsoft.AspNetCore.Mvc;
using AmazonBooks.Models;
using AmazonBooks.Data;

namespace AmazonBooks.Controllers;

public class BookController : Controller
{
    private ApplicationDbContext_db

    public BookController(ApplicationDbContext db)
    {
        _db = db;
    }
    public IActionResult Index()
    {
        var books=_db.Books.ToList();
        return View();
    }
    public IActionResult Create()
    {
        return View();
    }
    [HttpPost]
     public IActionResult CreateBoot(BooksEntity book)
    {
         _db.books.Add(book);
         _db.SaveChanges();

         return RedirectToAction("Index");
    }

}
```

⑧ ViewsにBooksファイルにCreate.cshtmlを作成する

```Views/Books/Create.cshtml
@model BooksEntity

@{
    ViewData["Title"] = "Adding New Books";
}

<form asp-action="CreateBook" asp-controller="Book" method="post">

<div class="row">
    <div class="col-lg-12">
    <div class="form-group">
       <label>Book Title</label>
       <input asp-for="Title" type="text" class="form-control" required>
    </div>

    <div class="form-group">
       <label>Author</label>
       <input asp-for="Author" type="text" class="form-control" required>
    </div>

    <div class="form-group">
       <label>ISBN Number</label>
       <input asp-for="ISBN" type="text" class="form-control" required>
    </div>

    <div class="form-group">
       <div asp-validation-summary="All" class="text-danger" ></div>
    </div>

    <div class="card-footer">
       <center>
        <button type="submit" class="btn btn-primary">Create Book</button>
        <a asp-action="Index" asp-controller="Books" class="btn btn-secondary">
       </center>
    </div>
</div>
</div>
</form>
```

## 参考サイト
[Learn Visual Studio Code Editor for ASP.NET MVC Application - Complete Tutorial](https://www.youtube.com/watch?v=ChhupWwNCgo&t=1735s)