EF Core 使用 Code First 方式从 C# 实体类自动生成数据库表,核心是通过 迁移(Migrations) 实现模型到数据库的同步。整个流程不依赖已有数据库,而是“先写类、再建库”。下面是一套清晰、可落地的完整步骤。
1. 定义实体类和 DbContext
这是起点。实体类描述数据结构,DbContext 管理实体与数据库之间的映射关系。
例如:
public class Product
{
public int Id { get; set; }
public string Name { get; set; } = string.Empty;
public decimal Price { get; set; }
}
<p>public class AppDbContext : DbContext
{
public DbSet<Product> Products { get; set; }</p><pre class='brush:php;toolbar:false;'>protected override void OnConfiguring(DbContextOptionsBuilder options)
=> options.UseSqlServer("Server=.;Database=MyAppDb;Trusted_Connection=true;");}
注意:连接字符串可根据环境放在
appsettings.json中,用
OnConfiguring或依赖注入方式配置更规范。
2. 安装 EF Core 工具并初始化迁移
确保项目已安装以下 NuGet 包:
Microsoft.EntityFrameworkCore.SqlServer(数据库提供程序)
Microsoft.EntityFrameworkCore.Tools(设计时工具,用于命令行)
在 包管理器控制台(PMC) 或 .NET CLI 中执行:
# PMC(需选择默认项目为含 DbContext 的项目)
Add-Migration InitialCreate
<h1>或 CLI(在项目文件所在目录运行)</h1><p>dotnet ef migrations add InitialCreate</p><div class="aritcle_card flexRow">
<div class="artcardd flexRow">
<a class="aritcle_card_img" href="/ai/2454" title="Deep Agent"><img
src="https://www.herecours.com/d/file/efpub/2026/21-21/20260221140158179497.jpg" alt="Deep Agent" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a>
<div class="aritcle_card_info flexColumn">
<a href="/ai/2454" title="Deep Agent">Deep Agent</a>
<p>一站式人工智能决策解决方案平台</p>
</div>
<a href="/ai/2454" title="Deep Agent" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a>
</div>
</div>这会在项目中生成一个
Migrations/xxx_InitialCreate.cs文件,包含
Up()(建表)和
Down()(回滚)方法。
3. 应用迁移创建数据库和表
此时数据库还不存在,首次运行迁移会自动创建库和表:
# PMC Update-Database <h1>CLI</h1><p>dotnet ef database update</p>
EF Core 会:
检查连接字符串指向的实例是否存在该数据库 若不存在,则新建数据库 按迁移文件中的Up()方法执行建表、主键、索引等操作
成功后,SQL Server 中就能看到
Products表,字段与
Product类完全对应。
4. 后续修改实体并同步数据库
当业务变化需要加字段、改类型或新增实体时:
修改实体类(如给Product加
Category属性) 再次运行
Add-Migration AddCategory(命名自定义) 再运行
Update-Database
EF Core 会基于当前模型与上一次迁移的快照(
xxx_InitialCreate_Snapshot.cs)计算差异,生成增量迁移脚本,安全升级结构。
基本上就这些。关键点在于:实体类即契约、迁移是版本控制、
Update-Database是最终落地动作。只要模型定义清晰、迁移及时提交,Code First 就非常稳健可靠。
