簡體   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