Entity Framework 6 - SqlConnection Open() 有效但 EF 尝试再次创建数据库 - 外部托管

Entity Framework 6 - SqlConnection Open() works but EF tries to Create Database again - External Hosting

我在 1&1.co.uk 托管的外部服务器上安装了一个 ASP.NET MVC 6 Web 应用程序(带有 WebApi)(访问受限工具)。服务器是 运行ning Windows Server 2016 Standard 和 SQL Server 2017 RTM。

我使用他们的 myLittleAdmin 工具创建了数据库,并使用 EF Update-Database -Verbose 的 SQL 输出创建了表。桌子看起来不错。

每当 Entity Framework 调用 DbContext 时生成的错误是

FAILED: CREATE DATABASE permission denied in database 'master'

这意味着当数据库已经存在并且我的连接字符串在 SqlConnection 实例中工作时,EF 正在尝试创建一个新数据库。

我想得到帮助的奇怪事情是我已经在 SqlConnection 实例中测试了连接字符串,该实例可以正常连接到数据库而不会崩溃。

问题:Entity Framework和DbContextSqlConnection有何不同?我该怎么做才能让 Entity Framework 使用现有数据库?

string connStr = ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString;

using (SqlConnection conn = new SqlConnection(connStr))
{
     try
     {
         conn.Open();
         message = "Connection opened."; // THIS WORKS!
         conn.Dispose();
     }
     catch (Exception e)
     {
         message = $"FAILED: { e.Message}\n{e.StackTrace}\n{e.Source}, Connection String: {connStr}";
     }
}

我通过在服务器上设置的测试控制器调用此函数,该服务器 returns 通过 ViewBag 向视图发送消息。但是任何试图调用 EF 的函数都会因上述错误而失败。

真正令人抓狂的是几周前我可以在服务器上注册新用户,但我需要核对数据库,因为我的实体 ID 设置为 int 而不是字符串。而现在这个。

注意:据我所知,我没有对服务器、IIS 或 SQL 管理器终端的远程桌面访问权限,只有我可以 运行 SQL 查询的 noddy myLittleAdmin 终端。哦,还有一个无用的支持台电话。

评论中提供完整的 Stacktrace!

已解决:发现 this answer by Ray,一行奇迹!

在Global.asax的Application_Start()方法中,添加:

using System.Data.Entity;

protected void Application_Start()
{
    Database.SetInitializer<ApplicationDbContext>(null);
    ...
}

文档说明如下:

// Summary:
//     Sets the database initializer to use for the given context type. The database
//     initializer is called when a the given System.Data.Entity.DbContext type is used
//     to access a database for the first time. The default strategy for Code First
//     contexts is an instance of System.Data.Entity.CreateDatabaseIfNotExists`1.
//
// Parameters:
//   strategy:
//     The initializer to use, or null to disable initialization for the given context
//     type.