Entity Framework Core入门 #
一、EF Core概述 #
1.1 什么是EF Core #
Entity Framework Core是.NET的ORM框架,用于数据库操作。
1.2 特点 #
- 跨平台
- 轻量级
- LINQ查询
- 迁移支持
- 多数据库支持
二、安装EF Core #
2.1 安装包 #
bash
dotnet add package Microsoft.EntityFrameworkCore
dotnet add package Microsoft.EntityFrameworkCore.SqlServer
dotnet add package Microsoft.EntityFrameworkCore.Tools
2.2 其他数据库 #
bash
dotnet add package Microsoft.EntityFrameworkCore.Sqlite
dotnet add package Npgsql.EntityFrameworkCore.PostgreSQL
dotnet add package Pomelo.EntityFrameworkCore.MySql
三、定义实体 #
3.1 实体类 #
csharp
public class User
{
public int Id { get; set; }
public string Name { get; set; }
public string Email { get; set; }
public DateTime CreatedAt { get; set; }
public ICollection<Order> Orders { get; set; }
}
public class Order
{
public int Id { get; set; }
public decimal Total { get; set; }
public DateTime OrderDate { get; set; }
public int UserId { get; set; }
public User User { get; set; }
}
3.2 DbContext #
csharp
public class AppDbContext : DbContext
{
public DbSet<User> Users { get; set; }
public DbSet<Order> Orders { get; set; }
public AppDbContext(DbContextOptions<AppDbContext> options) : base(options)
{
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<User>()
.HasMany(u => u.Orders)
.WithOne(o => o.User)
.HasForeignKey(o => o.UserId);
}
}
3.3 注册DbContext #
csharp
builder.Services.AddDbContext<AppDbContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")));
四、CRUD操作 #
4.1 创建 #
csharp
public async Task<User> CreateAsync(User user)
{
_context.Users.Add(user);
await _context.SaveChangesAsync();
return user;
}
4.2 查询 #
csharp
public async Task<User?> GetByIdAsync(int id)
{
return await _context.Users.FindAsync(id);
}
public async Task<List<User>> GetAllAsync()
{
return await _context.Users.ToListAsync();
}
public async Task<User?> GetByEmailAsync(string email)
{
return await _context.Users.FirstOrDefaultAsync(u => u.Email == email);
}
4.3 更新 #
csharp
public async Task UpdateAsync(User user)
{
_context.Users.Update(user);
await _context.SaveChangesAsync();
}
4.4 删除 #
csharp
public async Task DeleteAsync(int id)
{
var user = await _context.Users.FindAsync(id);
if (user != null)
{
_context.Users.Remove(user);
await _context.SaveChangesAsync();
}
}
五、迁移 #
5.1 创建迁移 #
bash
dotnet ef migrations add InitialCreate
dotnet ef migrations add AddUserEmail
5.2 应用迁移 #
bash
dotnet ef database update
dotnet ef database update AddUserEmail
5.3 回滚迁移 #
bash
dotnet ef database update PreviousMigration
dotnet ef migrations remove
5.4 生成SQL脚本 #
bash
dotnet ef migrations script
dotnet ef migrations script AddUserEmail
六、LINQ查询 #
6.1 基本查询 #
csharp
var users = await _context.Users
.Where(u => u.Age > 18)
.OrderBy(u => u.Name)
.ToListAsync();
6.2 关联查询 #
csharp
var usersWithOrders = await _context.Users
.Include(u => u.Orders)
.ToListAsync();
var users = await _context.Users
.Include(u => u.Orders.Where(o => o.Total > 100))
.ToListAsync();
6.3 投影查询 #
csharp
var userDtos = await _context.Users
.Select(u => new UserDto
{
Id = u.Id,
Name = u.Name,
OrderCount = u.Orders.Count
})
.ToListAsync();
6.4 分组查询 #
csharp
var orderCounts = await _context.Orders
.GroupBy(o => o.UserId)
.Select(g => new { UserId = g.Key, Count = g.Count() })
.ToListAsync();
七、事务 #
7.1 使用事务 #
csharp
using var transaction = await _context.Database.BeginTransactionAsync();
try
{
_context.Users.Add(user1);
await _context.SaveChangesAsync();
_context.Orders.Add(order1);
await _context.SaveChangesAsync();
await transaction.CommitAsync();
}
catch
{
await transaction.RollbackAsync();
throw;
}
八、总结 #
EF Core要点:
| 要点 | 说明 |
|---|---|
| DbContext | 数据库上下文 |
| DbSet | 实体集合 |
| 迁移 | 数据库版本控制 |
| LINQ | 查询语法 |
| 事务 | 原子操作 |
恭喜你完成了C#完全指南的学习!
最后更新:2026-03-26