[英]How to run migration SQL script using Entity Framework Core
[英]How to create a database from sql script using Entity Framework Core?
如果數據庫已經存在,我正在使用 EF Core 啟動一個項目。 我將數據庫結構作為 sql 腳本,每次初始化上下文時我都想運行它,以便每次運行應用程序時都有一個新的數據庫。 下面是傳統 EF 的一個片段,展示了我想用 EF Core實現的目標。
internal sealed class AnnotationContextDatabaseInitializer : DropCreateDatabaseAlways<AnnotationContext>
{
public override void InitializeDatabase(AnnotationContext context)
{
base.InitializeDatabase(context);
context.Database.ExecuteSqlCommand(TransactionalBehavior.EnsureTransaction, File.ReadAllText("dropAndCreateEntireDatabase.sql"));
}
}
在對 EF 有了更多經驗之后,我可以看到將上下文用於創建數據庫之類的事情是沒有意義的。 這將是一個雞蛋問題,如果上下文無效,它會錯過基礎表。
這確實是通過傳統的 SqlCommand 完成的,運行包含數據庫的腳本。
'''
public void ExecuteNonQuery(string query, string connectionString)
{
string[] splitter = new string[] {"\r\nGO"};
string[] commandTexts = query.Split(splitter, StringSplitOptions.RemoveEmptyEntries);
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.RetryOpen();
foreach (var commandText in commandTexts)
{
try
{
using (SqlCommand cmd = connection.CreateCommand())
{
cmd.CommandText = commandText;
cmd.CommandType = CommandType.Text;
cmd.ExecuteNonQuery();
}
}
catch (Exception)
{
connection.Close();
throw;
}
}
connection.Close();
}
}
'''
這可以在測試初始化中運行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.