EF Core 连接 SQL Server 不难,关键在三步:装对包、配好连接字符串、注册 DbContext。下面按实际开发顺序讲清楚。
安装必需的 NuGet 包
项目需要至少三个核心包,.NET 6 及以上推荐用 dotnet CLI 安装(更稳定):
Microsoft.EntityFrameworkCore.SqlServer:SQL Server 的 EF Core 提供程序 Microsoft.EntityFrameworkCore.Tools:支持迁移命令(dotnet ef migrations add、
update-database等) Microsoft.EntityFrameworkCore.Design:设计时支持,生成实体类或迁移时必需
在项目根目录执行:
dotnet add package Microsoft.EntityFrameworkCore.SqlServer<br>dotnet add package Microsoft.EntityFrameworkCore.Tools<br>dotnet add package Microsoft.EntityFrameworkCore.Design
如果用 Visual Studio,也可通过“管理 NuGet 包”界面安装,注意选对项目(通常是启动项目或数据访问类库)。
配置连接字符串
把连接字符串写进 appsettings.json,别硬编码在代码里:
"ConnectionStrings": {<br> "SqlServerDb": "Server=.;Database=MyAppDB;User Id=sa;Password=your_password;TrustServerCertificate=True;"<br>}
说明:
Server=.表示本地 SQL Server 实例;若用命名实例,写成
Server=.;InstanceName=SQLEXPRESS
TrustServerCertificate=True是 .NET 6+ 默认要求(尤其本地开发),否则可能报证书错误 如用 Windows 身份验证,改用
Trusted_Connection=True;,删掉 User Id 和 Password
注册 DbContext 并注入服务
在 Program.cs(.NET 6+)中添加:
var builder = WebApplication.CreateBuilder(args);<br>builder.Services.AddDbContext<AppDbContext>(options =><br> options.UseSqlServer(builder.Configuration.GetConnectionString("SqlServerDb")));
接着定义你的 AppDbContext 类(通常放在 Models 或 Data 文件夹下):
public class AppDbContext : DbContext<br>{<br> public AppDbContext(DbContextOptions<AppDbContext> options) : base(options) { }<br><br> public DbSet<Product> Products { get; set; }<br><br> protected override void OnModelCreating(ModelBuilder modelBuilder)<br> {<br> modelBuilder.Entity<Product>().ToTable("Products");<br> }<br>}
确保 Product 类有主键(如
public int Id { get; set; }),EF Core 才能自动识别。
(可选)反向工程:从已有数据库生成模型
适合 DB First 场景。打开 程序包管理器控制台,确保默认项目是含 DbContext 的项目,运行:
Scaffold-DbContext "Server=.;Database=MyAppDB;User Id=sa;Password=your_password;TrustServerCertificate=True;" `<br> Microsoft.EntityFrameworkCore.SqlServer `<br> -OutputDir Models `<br> -Context AppDbContext `<br> -UseDatabaseNames `<br> -NoOnConfiguring
参数说明:
-OutputDir Models:生成的实体类放 Models 文件夹
-Context:指定 DbContext 类名
-UseDatabaseNames:表名/列名不转 PascalCase,保持原样
-NoOnConfiguring:不生成硬编码连接字符串的
OnConfiguring方法(推荐,让连接由 DI 控制)
执行后,Models 下会自动生成实体类和 DbContext,可直接使用。
基本上就这些。连通后,控制器里注入
AppDbContext就能查数据了,比如
_context.Products.ToList()。不复杂但容易忽略 TrustServerCertificate 或包版本不匹配的问题。
