Step 1: Create a New Project

Open Visual Studio 2022.

Step 2: Install EF Core

Install:

Step 3: Create the Model

Add:

using System.ComponentModel.DataAnnotations;

namespace ProductCRUD.Models
{
    public class Product
    {
        public int Id { get; set; }

        [Required]
        public string Name { get; set; }

        [Range(0, 10000)]
        public decimal Price { get; set; }
    }
}

Step 4: Create the Database Context

Add:

using Microsoft.EntityFrameworkCore;
using ProductCRUD.Models;

namespace ProductCRUD.Data
{
    public class ApplicationDbContext : DbContext
    {
        public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options) { }

        public DbSet<Product> Products { get; set; }
    }
}

Step 5: Configure the Database

Open appsettings.json and add the connection string:

"ConnectionStrings": {
  "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=ProductDB;Trusted_Connection=True;MultipleActiveResultSets=true"
}

Open Program.cs and add:

using Microsoft.EntityFrameworkCore;
using ProductCRUD.Data;

var builder = WebApplication.CreateBuilder(args);

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

var app = builder.Build();

if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Home/Error");
}
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Products}/{action=Index}/{id?}");

app.Run();

Step 6: Scaffold the Controller and Views

Set:

Click Add.

Visual Studio will automatically generate all CRUD views and the controller.

Step 7: Create Database

Open Package Manager Console (Tools → NuGet Package Manager → Package Manager Console).

Run:

Add-Migration InitialCreate
Update-Database

This creates the database ProductDB in LocalDB.

Step 8: Run the App

Additional Commands

Add-Migration InitialCreate
Update-Database

Views/Products/Create.cshtml

@model ProductCRUD.Models.Product

@{
    ViewData["Title"] = "Create Product";
}

<h1>Create Product</h1>

<form asp-action="Create" method="post">
    <div class="form-group">
        <label asp-for="Name"></label>
        <input asp-for="Name" class="form-control" />
        <span asp-validation-for="Name" class="text-danger"></span>
    </div>

    <div class="form-group">
        <label asp-for="Price"></label>
        <input asp-for="Price" class="form-control" />
        <span asp-validation-for="Price" class="text-danger"></span>
    </div>

    <button type="submit" class="btn btn-primary">Create</button>
    <a asp-action="Index" class="btn btn-secondary">Cancel</a>
</form>

@section Scripts {
    @{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}

Views/Products/Edit.cshtml

@model ProductCRUD.Models.Product

@{
    ViewData["Title"] = "Edit Product";
}

<h1>Edit Product</h1>

<form asp-action="Edit" method="post">
    <input type="hidden" asp-for="Id" />

    <div class="form-group">
        <label asp-for="Name"></label>
        <input asp-for="Name" class="form-control" />
        <span asp-validation-for="Name" class="text-danger"></span>
    </div>

    <div class="form-group">
        <label asp-for="Price"></label>
        <input asp-for="Price" class="form-control" />
        <span asp-validation-for="Price" class="text-danger"></span>
    </div>

    <button type="submit" class="btn btn-primary">Save</button>
    <a asp-action="Index" class="btn btn-secondary">Cancel</a>
</form>

@section Scripts {
    @{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}

Views/Products/Delete.cshtml

@model ProductCRUD.Models.Product

@{
    ViewData["Title"] = "Delete Product";
}

<h1>Delete Product</h1>

<h3>Are you sure you want to delete this product?</h3>

<div>
    <h4>@Model.Name</h4>
    <p>Price: @Model.Price</p>
</div>

<form asp-action="DeleteConfirmed" method="post">
    <input type="hidden" asp-for="Id" />
    <button type="submit" class="btn btn-danger">Delete</button>
    <a asp-action="Index" class="btn btn-secondary">Cancel</a>
</form>

Summary

This article walks through building a complete CRUD application using ASP.NET Core MVC and Entity Framework Core, starting from project creation to database setup and UI scaffolding. It demonstrates how to define models, configure DbContext, run migrations, and generate views, resulting in a fully functional product management system.