【问题标题】:Automatically Create Database on the Server When app starts应用启动时自动在服务器上创建数据库
【发布时间】:2015-04-30 16:31:18
【问题描述】:

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

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

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


到目前为止我的尝试

  • 我创建了一个具有 SysAdminDbCreator 角色的数据库用户。
  • 我在DbContext 中使用了CreateDatabaseIfNotExists 初始化器

我的 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,是否可以将应用程序配置为自动检查连接字符串,如果没有数据库,则在首次运行时创建它?

我将不胜感激有关该主题的一些建议。

【问题讨论】:

  • 将此代码放在 Global.asax Start 方法中。 atabase.SetInitializer(new CreateDatabaseIfNotExists());
  • 天啊! :D -- 编辑:误报,我以为创建了一个新的数据库,但那是我用 update-database 命令创建的:(
  • 您必须删除此数据库。您正在使用 CreateDatabaseIfNotExists。
  • 您还需要检查运行 Web 应用程序的身份是否有权访问和在服务器上创建数据库。不 - 我看到你涵盖了。对不起!
  • @Fals,我更改了连接字符串中的“初始目录”和“AttachDbFilename”属性。这还不足以创建一个新的数据库吗?

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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-23
    • 1970-01-01
    • 2017-11-27
    • 2013-12-25
    相关资源
    最近更新 更多