🗄️ Entity Framework = Data Access
SQL is tedious. Entity Framework is ORM. Query with C#, migrations, change tracking.
📝 EF Core Setup
# Install packages
dotnet add package Microsoft.EntityFrameworkCore
dotnet add package Microsoft.EntityFrameworkCore.SqlServer
dotnet add package Microsoft.EntityFrameworkCore.Design
dotnet add package Microsoft.EntityFrameworkCore.Tools
# Create DbContext
public class AppDbContext : DbContext
{
public AppDbContext(DbContextOptions options)
: base(options)
{ }
public DbSet Users { get; set; }
public DbSet Orders { get; set; }
}
# Models
public class User
{
public int Id { get; set; }
public string Name { get; set; }
public string Email { get; set; }
public DateTime CreatedAt { get; set; }
public List Orders { get; set; }
}
public class Order
{
public int Id { get; set; }
public int UserId { get; set; }
public decimal Total { get; set; }
public DateTime OrderDate { get; set; }
public User User { get; set; }
}
# Register in Program.cs
builder.Services.AddDbContext(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")));
🎯 Querying with EF Core
public class UserService
{
private readonly AppDbContext _context;
public UserService(AppDbContext context)
{
_context = context;
}
public async Task GetUserByIdAsync(int id)
{
return await _context.Users
.Include(u => u.Orders)
.FirstOrDefaultAsync(u => u.Id == id);
}
public async Task> GetActiveUsersAsync()
{
return await _context.Users
.Where(u => u.IsActive)
.OrderBy(u => u.Name)
.ToListAsync();
}
public async Task CreateUserAsync(User user)
{
_context.Users.Add(user);
await _context.SaveChangesAsync();
return user;
}
public async Task UpdateUserAsync(User user)
{
_context.Users.Update(user);
await _context.SaveChangesAsync();
return user;
}
public async Task DeleteUserAsync(int id)
{
var user = await _context.Users.FindAsync(id);
if (user != null)
{
_context.Users.Remove(user);
await _context.SaveChangesAsync();
}
}
}
💡 EF Core Tips
- Use async methods
- Include related data (Include/ThenInclude)
- Use AsNoTracking for read-only queries
- Manage migrations
- Use repository pattern for separation
“Entity Framework simplifies data access. Query with C#, migrations, change tracking. Essential for .NET apps.”
