C# Model命令生成数据库表实战:从零开始使用dotnet ef migrations add

1次阅读
没有评论

共计 1562 个字符,预计需要花费 4 分钟才能阅读完成。

image.webp

背景痛点

在 C# 开发中,数据库表结构的变更是一个常见需求。传统的手动创建表方式存在诸多问题:

C# Model 命令生成数据库表实战:从零开始使用 dotnet ef migrations add

  • 开发与生产环境表结构不一致导致运行时错误
  • 缺少版本控制,难以追踪历史变更
  • 团队协作时难以同步数据库变更
  • 回滚困难,出错成本高

技术选型对比

Entity Framework Core 相比其他 ORM 工具 (Dapper、NHibernate 等) 的迁移优势:

  1. 声明式迁移:通过 C# 类定义数据结构,自动生成 SQL
  2. 版本控制:每次迁移生成独立版本文件
  3. 跨平台:支持多种数据库引擎(MySQL/SQL Server/PostgreSQL 等)
  4. CLI 工具链:提供完整的命令行操作支持

核心实现细节

1. 定义 Model 类

// Product.cs
public class Product
{[Key] // 主键注解
    public int Id {get; set;}

    [Required] // 非空约束
    [MaxLength(100)] // 长度限制
    public string Name {get; set;}

    [Column(TypeName = "decimal(18,2)")] // 列类型定义
    public decimal Price {get; set;}

    public DateTime CreatedDate {get; set;} = DateTime.Now;
}

2. 配置 DbContext

// AppDbContext.cs
public class AppDbContext : DbContext
{public DbSet<Product> Products { get; set;}

    protected override void OnConfiguring(DbContextOptionsBuilder options)
        => options.UseSqlServer("Server=(localdb)\\mssqllocaldb;Database=MyAppDb;Trusted_Connection=True;");
}

3. 创建迁移

  1. 安装必要工具包:

    dotnet tool install --global dotnet-ef
    dotnet add package Microsoft.EntityFrameworkCore.Design

  2. 生成迁移文件:

    dotnet ef migrations add InitialCreate --output-dir Data/Migrations

4. 应用迁移

dotnet ef database update

性能与安全性考量

  1. 锁表问题:
  2. 大型表迁移使用 Online 模式(数据库支持时)
  3. 避免在生产高峰期执行迁移

  4. 敏感数据处理:

  5. 不要在迁移中硬编码敏感信息
  6. 使用 SecureString 处理密码字段
  7. 考虑加密敏感列数据

生产环境避坑指南

迁移冲突解决

  1. 使用 dotnet ef migrations script 生成 SQL 脚本
  2. 手动解决冲突后重新生成迁移
  3. 关键操作前备份数据库

回滚操作

  1. 回退到特定迁移版本:

    dotnet ef database update LastGoodMigration

  2. 完全移除最后一次迁移:

    dotnet ef migrations remove

团队协作建议

  1. 迁移文件管理:
  2. 将迁移文件纳入版本控制
  3. 禁止直接修改已提交的迁移文件

  4. 自动化流程:

  5. CI/CD 流水线中加入迁移验证步骤
  6. 预生产环境测试迁移脚本

完整示例代码

// Program.cs 示例
using var db = new AppDbContext();

db.Products.Add(new Product 
{ 
    Name = "示例产品",
    Price = 99.99m 
});

db.SaveChanges();

总结

通过 EF Core 迁移功能,我们实现了从 Model 到数据库表的自动化管理。这种方法不仅提高了开发效率,更确保了数据库变更的可控性和可追溯性。建议在团队中建立统一的迁移规范,并考虑将迁移过程整合到 CI/CD 流程中,以实现更稳健的数据库变更管理。

正文完
 0
评论(没有评论)