您现在的位置是:首页 >学无止境 >.net core 中EF Core用法网站首页学无止境
.net core 中EF Core用法
什么是 Entity Framework Core (EF Core)?
Entity Framework Core 是 .NET Core 下的轻量级、跨平台、可扩展、开源的对象关系映射(ORM)框架。它用于方便地处理关系型数据库操作,将数据库中的表映射为 C# 类对象,并通过 LINQ 查询等方式简化数据访问操作。
以下是 EF Core 的核心用法,包括如何安装、配置、迁移和进行基本的增删查改操作。
一、安装 EF Core
在使用 EF Core 之前,你需要安装相关 NuGet 包。假设我们当前的项目是基于 .NET Core 的控制台应用程序。
-
安装基础 EF Core NuGet 包
Microsoft.EntityFrameworkCore
是 EF Core 的核心包。dotnet add package Microsoft.EntityFrameworkCore
-
选择适配器(数据库提供程序) 根据使用的数据库安装所需提供程序包。例如:
- SQL Server
dotnet add package Microsoft.EntityFrameworkCore.SqlServer
- SQLite
dotnet add package Microsoft.EntityFrameworkCore.Sqlite
- MySQL
dotnet add package Pomelo.EntityFrameworkCore.MySql
- SQL Server
-
安装工具(可选) 如果需要支持数据库迁移功能,还需要安装以下工具包:
dotnet add package Microsoft.EntityFrameworkCore.Tools
二、基本使用步骤
1. 创建数据模型
创建与你的数据库表相对应的模型类。例如,假设有一个用户表 Users
,则我们可以创建一个 User
类:
C#
public class User
{
public int Id { get; set; } // 主键
public string Name { get; set; } // 用户名
public int Age { get; set; } // 年龄
}
2. 创建 DbContext
子类
DbContext
是 EF Core 的核心上下文,负责管理 Entity 和数据库的交互。创建一个继承自 DbContext
的类,并在其中定义实体与数据库表的映射。
C#
using Microsoft.EntityFrameworkCore;
public class AppDbContext : DbContext
{
// 定义 DbSet 与数据库中的表对应
public DbSet<User> Users { get; set; }
// 配置数据库连接
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
// 使用 SQL Server 数据库
optionsBuilder.UseSqlServer("Server=localhost;Database=TestDb;Trusted_Connection=True;");
}
}
3. 数据库迁移
EF Core 提供的迁移工具,可用于根据代码生成或更新数据库表结构:
-
启用迁移系统
dotnet ef migrations add InitialCreate
这将根据数据模型生成一组迁移代码。
-
更新数据库
dotnet ef database update
这将根据迁移文件创建或更新数据库架构。
4. CRUD 操作
以下是 EF Core 中常见的基本操作:
插入数据
C#
using System;
class Program
{
static void Main(string[] args)
{
using var context = new AppDbContext();
// 插入新用户数据
var user = new User { Name = "Alice", Age = 25 };
context.Users.Add(user);
context.SaveChanges();
Console.WriteLine("数据已插入成功");
}
}
查询数据
使用 LINQ 查询数据库中的数据:
C#
using System;
using System.Linq;
class Program
{
static void Main(string[] args)
{
using var context = new AppDbContext();
// 查询所有用户
var users = context.Users.ToList();
foreach (var user in users)
{
Console.WriteLine($"ID: {user.Id}, Name: {user.Name}, Age: {user.Age}");
}
// 查询单个用户(条件查询)
var specificUser = context.Users.SingleOrDefault(u => u.Name == "Alice");
if (specificUser != null)
{
Console.WriteLine($"找到用户: ID={specificUser.Id}, Name={specificUser.Name}");
}
}
}
更新数据
通过修改实体对象的属性并保存更改来更新数据:
C#
using System;
using System.Linq;
class Program
{
static void Main(string[] args)
{
using var context = new AppDbContext();
// 查询要更新的用户
var user = context.Users.SingleOrDefault(u => u.Name == "Alice");
if (user != null)
{
// 修改属性
user.Age = 30;
// 保存更改
context.SaveChanges();
Console.WriteLine("用户数据已更新");
}
}
}
删除数据
通过 Remove
方法删除实体:
C#
using System;
using System.Linq;
class Program
{
static void Main(string[] args)
{
using var context = new AppDbContext();
// 查询要删除的用户
var user = context.Users.SingleOrDefault(u => u.Name == "Alice");
if (user != null)
{
context.Users.Remove(user);
context.SaveChanges();
Console.WriteLine("用户数据已删除");
}
}
}
三、高级功能
1. 配置模型关系(Fluent API 和数据注解)
EF Core 支持通过 Fluent API 或数据注解定义模型的属性规则、表关系等。
数据注解
在实体类中通过属性注解指定规则:
C#
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
public class User
{
[Key] // 主键
public int Id { get; set; }
[Required] // 不允许为 null
[MaxLength(100)] // 最大长度为 100
public string Name { get; set; }
public int Age { get; set; }
}
Fluent API
通过 DbContext
中的 OnModelCreating
方法配置规则:
C#
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
// 配置 User 表
modelBuilder.Entity<User>(entity =>
{
entity.HasKey(u => u.Id); // 设置主键
entity.Property(u => u.Name)
.IsRequired()
.HasMaxLength(100); // 配置 Name 的最大长度
});
}
2. 迁移与版本控制
-
添加新表或修改现有表时,需要更新迁移文件:
dotnet ef migrations add AddNewChanges
-
查看数据库当前迁移状态:
dotnet ef migrations list
-
强制回滚到特定迁移:
dotnet ef database update <MigrationName>
四、常见问题
-
EF Core 报 "无法连接到数据库" 错误? 确保数据库连接字符串正确,并且你的数据库服务器已经启动。
-
模型更改后数据库未更新? 每次更改模型都需要使用
dotnet ef migrations add
添加新的迁移,然后通过dotnet ef database update
应用迁移。
这是一份完整的 EF Core 使用入门教程,如果你需要更复杂的功能(如原生 SQL 查询、事务支持等),也可以进一步探索 EF Core 文档!