簡體   English   中英

如何使用 Entity Framework Core 從 sql 腳本創建數據庫?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM