Add these packages to your project via Package Manager UI or Package Manager Console:
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="8.0.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="8.0.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="8.0.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="8.0.0" />
Package Purposes:
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace YourProject.Models
{
// Product POCO
public class Product
{
[Key]
public int ProductId { get; set; }
[Required]
[MaxLength(100)]
public string Name { get; set; }
[Column(TypeName = "decimal(18,2)")]
public decimal Price { get; set; }
public string Description { get; set; }
public int CategoryId { get; set; }
// Navigation property
public virtual Category Category { get; set; }
}
// Category POCO
public class Category
{
[Key]
public int CategoryId { get; set; }
[Required]
[MaxLength(50)]
public string Name { get; set; }
// Navigation property
public virtual ICollection<Product> Products { get; set; }
}
// Order POCO
public class Order
{
[Key]
public int OrderId { get; set; }
public DateTime OrderDate { get; set; }
[Required]
[MaxLength(100)]
public string CustomerName { get; set; }
[Column(TypeName = "decimal(18,2)")]
public decimal TotalAmount { get; set; }
// Navigation property
public virtual ICollection<OrderItem> OrderItems { get; set; }
}
// OrderItem POCO
public class OrderItem
{
[Key]
public int OrderItemId { get; set; }
public int OrderId { get; set; }
public int ProductId { get; set; }
public int Quantity { get; set; }
[Column(TypeName = "decimal(18,2)")]
public decimal UnitPrice { get; set; }
// Navigation properties
public virtual Order Order { get; set; }
public virtual Product Product { get; set; }
}
}
using Microsoft.EntityFrameworkCore;
using YourProject.Models;
namespace YourProject.Data
{
public class ApplicationDbContext : DbContext
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
{
}
// DbSets for each entity
public DbSet<Product> Products { get; set; }
public DbSet<Category> Categories { get; set; }
public DbSet<Order> Orders { get; set; }
public DbSet<OrderItem> OrderItems { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
// Configure relationships
modelBuilder.Entity<Product>()
.HasOne(p => p.Category)
.WithMany(c => c.Products)
.HasForeignKey(p => p.CategoryId);
modelBuilder.Entity<OrderItem>()
.HasOne(oi => oi.Order)
.WithMany(o => o.OrderItems)
.HasForeignKey(oi => oi.OrderId);
modelBuilder.Entity<OrderItem>()
.HasOne(oi => oi.Product)
.WithMany()
.HasForeignKey(oi => oi.ProductId);
// Seed data (optional)
modelBuilder.Entity<Category>().HasData(
new Category { CategoryId = 1, Name = "Electronics" },
new Category { CategoryId = 2, Name = "Books" }
);
}
}
}
Add to appsettings.json
:
{
"ConnectionStrings": {
"DefaultConnection": "Server=(localdb)\\\\mssqllocaldb;Database=YourProjectDb;Trusted_Connection=true;MultipleActiveResultSets=true"
}
}
Register in Program.cs
(or Startup.cs
):
builder.Services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")));