我有一个WebApi 2(使用EntityFramework 6 - Code-First )/ Angular SPA(基于MVC构建)应用程序。我想上传我的文件,在浏览器上打开应用程序,看看我使用连接字符串中 web.config 上设置的信息创建的数据库。
由于我将使用已编译的文件在服务器上创建新的Web应用程序,因此无法在控制台上运行Update-Database
命令或使用Database Migrations
创建新数据库。
我只想编译我的应用程序,更改每个不同域的连接字符串并上传到我的服务器。我希望以这种方式为每个域看到一个带有空表的新数据库。
到目前为止我所做的一切
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 ,是否可以将应用配置为自动检查连接字符串,如果没有数据库,则在首次运行时创建它?
我很感激有关这个问题的一些建议。
答案 0 :(得分:1)
首先,如果在连接字符串中指定数据库但它不存在则无法连接。理想情况下检查连接是否失败,然后在连接字符串中没有Initial Catalog=
的情况下进行连接。然后,您应该能够发出sql命令来创建数据库,之后关闭此连接并返回指定数据库的那个。
我不知道EF是否能够在那时做到这一点:如果你是代码优先的话应该。如果你是db(我总是这样做)那么也许不是,你必须直接发出所有的create etc等命令。