[英]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"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.