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

1次阅读
没有评论

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

image.webp

背景痛点

在 C# 项目中,数据库表结构的变更是一个常见需求。传统手动创建或修改 SQL 脚本的方式存在以下问题:

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

  • 难以维护:随着项目迭代,SQL 脚本数量激增,版本管理困难
  • 容易出错:手动编写 SQL 容易遗漏字段或约束
  • 缺乏一致性:开发、测试、生产环境的表结构难以保持同步

技术选型对比

常见的.NET ORM 工具迁移功能对比:

  • Entity Framework Core:微软官方支持,迁移工具集成度高
  • Dapper:轻量级但需要手动管理迁移
  • NHibernate:功能强大但配置复杂

对于大多数项目,EF Core 的迁移系统提供了最佳平衡点。

核心实现细节

1. 定义 Model 类

Model 类是数据库表的 C# 表示。以下是一个典型的用户模型示例:

public class User
{[Key]
    public int Id {get; set;}

    [Required]
    [MaxLength(100)]
    public string Username {get; set;}

    [EmailAddress]
    public string Email {get; set;}

    public DateTime CreatedAt {get; set;} = DateTime.UtcNow;
}

2. 配置 DbContext

DbContext 是 EF Core 的核心组件,负责数据库交互:

public class AppDbContext : DbContext
{public DbSet<User> Users { get; set;}

    protected override void OnConfiguring(DbContextOptionsBuilder options)
    {options.UseSqlServer("YourConnectionString");
    }
}

3. 创建迁移

在项目目录执行以下命令:

dotnet ef migrations add InitialCreate

这会生成迁移文件,包含 Up(应用变更)和 Down(回滚变更)方法。

4. 应用迁移到数据库

执行以下命令将迁移应用到数据库:

dotnet ef database update

完整代码示例

Model 定义

// Models/Product.cs
public class Product
{public int Id { get; set;}
    public string Name {get; set;}
    public decimal Price {get; set;}
    public int Stock {get; set;}
}

DbContext 配置

// Data/AppDbContext.cs
public class AppDbContext : DbContext
{public AppDbContext(DbContextOptions<AppDbContext> options)
        : base(options) { }

    public DbSet<Product> Products {get; set;}

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {modelBuilder.Entity<Product>()
            .Property(p => p.Price)
            .HasColumnType("decimal(18,2)");
    }
}

性能与安全性考量

锁表问题

  • 大型表迁移可能导致长时间锁表
  • 解决方案:
  • 在低峰期执行迁移
  • 考虑使用 Online Schema Change 工具

敏感数据处理

  • 避免在迁移中硬编码敏感信息
  • 使用环境变量或密钥管理系统存储连接字符串

生产环境避坑指南

处理迁移冲突

  1. 检查 __EFMigrationsHistory
  2. 使用 dotnet ef migrations script 生成 SQL 脚本
  3. 手动合并冲突部分

回滚迁移

dotnet ef database update LastGoodMigration

结语

在团队协作中,建议:

  • 将迁移文件纳入版本控制
  • 建立迁移评审流程
  • 考虑在 CI/CD 流程中集成自动迁移

自动化迁移在测试环境中可行,但对生产环境应保持谨慎态度,建议保留人工确认环节。

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