EF Core Database.EnsureCreated 开始创建 table SQL 并且没有向数据库发送请求

EF Core Database.EnsureCreated get creating table SQL and without sending request to database

我使用 EF Core - Database.EnsureCreated 通过 C# class 创建 table,但现在我只想创建 table 和列 SQL 并且不向数据库发送请求。

例如

public class ApplicationDbContext : DbContext
{
    public DbSet<Dto> Dtos{ get; set; }
}

public class Dto
{
  [Key]
  [StringLength(10)]
    public string ID{ get; set; }
  [StringLength(100)]
  [Required]
    public string Name{ get; set; }
  [Required]
  public int Age{ get; set; }
}

db.Database.EnsureDeleted();

预期结果:

create table Dto
{
  ID nvarchar(10) primary key not null,
  Name nvarchar(100) not null,
  Age int not null
}

我尝试了什么?

我确实打开了 SSMS 配置文件并从 EF Core 获取了 SQL,但它需要向数据库发送请求。

您可以使用 dotnet EF CLI 运行 迁移脚本:

dotnet ef migrations script -i -o "C:\MYFOLDER\dbscript.sql"

REF:https://docs.microsoft.com/en-us/ef/core/cli/dotnet

对于这些类型的问题,我通常的做法是在 source code. I found the implementation of .EnsureCreated(), then noticed that there is a public method to .GenerateCreateScript() on the same type. Searching the entire code base for calls to that method reveals an extension method on DatabaseFacade 中四处闲逛。所以你需要做的就是;

var sqlSource = db.Database.GenerateCreateScript();

然而,使用 google 搜索该方法不会在官方文档中显示任何结果。创建生产数据库的“正确”方法是创建迁移,然后创建一个 sql 脚本来应用它们。