【问题标题】:How to create a database from sql script using Entity Framework Core?如何使用 Entity Framework Core 从 sql 脚本创建数据库?
【发布时间】:2019-02-08 23:07:20
【问题描述】:

如果数据库已经存在,我正在使用 EF Core 开始一个项目。我将数据库结构作为 sql 脚本,每次初始化上下文时都想运行它,以便每次运行应用程序时都有一个新的数据库。下面是来自传统 EF 的 sn-p,展示了我希望使用 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"));
    }
}

【问题讨论】:

    标签: c# entity-framework-core .net-standard-2.0 entity-framework-migrations


    【解决方案1】:

    在对 EF 有了更多经验之后,我发现将上下文用于创建数据库之类的事情是没有意义的。这将是一个鸡蛋问题,如果上下文无效并且错过了基础表。

    这确实使用传统的 SqlCommand 来完成,运行包含 DB 的脚本。

    ´´´

        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();
            }
        }
    

    ´´´

    这可以在测试初始化​​中运行。

    【讨论】:

      猜你喜欢
      • 2021-04-04
      • 2019-06-08
      • 1970-01-01
      • 2017-06-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-30
      • 2017-07-10
      • 1970-01-01
      相关资源
      最近更新 更多