应用程序启动时自动在服务器上创建数据库

时间:2015-04-30 16:31:19

标签: c# asp.net sql-server database entity-framework-6

我有一个WebApi 2(使用EntityFramework 6 - Code-First )/ Angular SPA(基于MVC构建)应用程序。我想上传我的文件,在浏览器上打开应用程序,看看我使用连接字符串中 web.config 上设置的信息创建的数据库。

由于我将使用已编译的文件在服务器上创建新的Web应用程序,因此无法在控制台上运行Update-Database命令或使用Database Migrations创建新数据库。

我只想编译我的应用程序,更改每个不同域的连接字符串并上传到我的服务器。我希望以这种方式为每个域看到一个带有空表的新数据库。

到目前为止我所做的一切

  • 我使用 SysAdmin DbCreator 角色创建了一个数据库用户。
  • 我在CreateDatabaseIfNotExists
  • 中使用了DbContext初始值设定项

我的DataContext类

public class DataContext : DbContext
{
    public DataContext() : base("DefaultConnection")
    {
        Database.SetInitializer<DbContext>(new CreateDatabaseIfNotExists<DbContext>());
        Database.Initialize(true);
    }
}

连接字符串

<add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=Company01;AttachDbFilename=|DataDirectory|\Company01.mdf;Integrated Security=True" providerName="System.Data.SqlClient" />

现在,具有此配置的应用程序无法在应用程序启动时(或在我实际访问数据库的页面上)创建数据库。我必须从控制台使用Update-Database命令才能创建数据库。

使用 EntityFramework ,是否可以将应用配置为自动检查连接字符串,如果没有数据库,则在首次运行时创建它?

我很感激有关这个问题的一些建议。

1 个答案:

答案 0 :(得分:1)

首先,如果在连接字符串中指定数据库但它不存在则无法连接。理想情况下检查连接是否失败,然后在连接字符串中没有Initial Catalog=的情况下进行连接。然后,您应该能够发出sql命令来创建数据库,之后关闭此连接并返回指定数据库的那个。

我不知道EF是否能够在那时做到这一点:如果你是代码优先的话应该。如果你是db(我总是这样做)那么也许不是,你必须直接发出所有的create etc等命令。