Skip to main content

6 EF Core

数据库迁移指令

安装dotnet ef

dotnet tool install --global dotnet-ef

生成迁移代码

dotnet ef migrations add "迁移名称"

更新到数据库中

dotnet ef database update

更新指定迁移脚本(可以回滚到某次的迁移脚本处)

dotnet ef database update "迁移名称"

 

删除最后一次迁移脚本

dotnet ef migrations remove

 

生成SQL代码

dotnet ef migrations script "迁移名称(起始, 默认是第一次迁移)" "迁移名称(结束, 默认是最后一次迁移)"

 

批量修改/删除

Nuget 包: Zack.EFCore.Batch(.NET 7 之前, .NET 7 之后已支持批量修改/删除)

Fluent API

  • 视图与实体类映射(不推荐使用)
    • builder.ToView("blogsView")
  • 表与实体类映射
    • builder.ToTable("T_Books")
  • 排除属性映射
    • builder.Ignore(b => b.Name2)
  • 配置列名
    • builder.Property(b => b.BlogId).HasColumnName("blog_id")
  • 配置列数据类型
    • builder.Property(b => b.BlogId).HasColumnType("varchar(200)")
  • 配置最大长度
    • builder.Property(b => b.Name).HasMaxLength(20)
  • 配置不为空
    • builder.Property(b => b.BlogId).IsRequired()
  • 配置默认值
    • builder.Property(b => b.Name).HasDefaultValue("Def")
  • 配置主键
    • 默认把名字为 Id 或者"实体类型+Id"的属性作为主键, 可以用 HasKey() 来配置其它属性作为主键
    • builder.HasKey(b => b.Number)
    • 支持复合主键, 但不建议使用
  • 配置索引
    • builder.HasIndex(b => b.Url)
    • 支持复合索引, 如builder.HasIndex(b => new { b.FirstName, p.LastName } )
    • 默认情况下定义的索引不是唯一索引, 使用 IsUnique() 把索引设置为唯一索引
    • 还可以使用 IsClustered() 把索引设置为聚集索引