繁体   English   中英

EF Core Database.EnsureCreated 获取创建表 SQL 并且不向数据库发送请求

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

我使用 EF Core - Database.EnsureCreated通过 C# 类创建表,但现在我只想创建表和列 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,但它需要向数据库发送请求。

对于这类问题,我通常采用的方法是查看源代码 我找到了.EnsureCreated()的实现,然后注意到在同一类型上有一个.GenerateCreateScript()的公共方法。 在整个代码库中搜索对该方法的调用会揭示DatabaseFacade上的一个扩展方法。 所以你需要做的就是;

var sqlSource = db.Database.GenerateCreateScript();

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM