ASP.NET MVC 4 EF6无法连接SQL Server Express数据库

本文关键字:SQL 连接 Server Express 数据库 NET MVC EF6 ASP | 更新日期: 2023-09-27 18:06:23

当我从LocalDb移动到SQL Server Express时,我有一个奇怪的错误。这是错误:

这个操作需要连接到"主"数据库。不能要创建一个连接到'主'数据库,因为原始的数据库连接已打开,凭据已删除从连接字符串。提供未打开的连接。

当我在上下文初始化时尝试CreateDatabaseIfNotExists时发生此错误。

这是我的连接字符串:

<add name="DefaultConnection" 
     connectionString="Data Source=.'SQLEXPRESS;Initial Catalog=AlvinCMS;MultipleActiveResultSets=True;" 
     providerName="System.Data.SqlClient" />

这是我的上下文:

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

我在global.asax上启动数据库:

protected void Application_Start()
{ 
    //Check And Init Database
    Alvin_CMS.App_Start.DatabaseConfig.Initialize();

最后这是我的初始化代码:

public static void Initialize()
{
    Alvin_CMS.Models.AlvinCMSMigrationDBContext migrationDB = new Models.AlvinCMSMigrationDBContext();
    try
    {
        if (!migrationDB.Database.Exists())
        {
            migrationDB.Database.Initialize(false); //ERROR HERE!
            AlvinCMSExtension.Models.AccountDBContext accountDB = new AlvinCMSExtension.Models.AccountDBContext();
            accountDB.Database.Initialize(false);
            SetDefaultValue(migrationDB);
        }
        migrationDB.Database.Initialize(false);
    }
    catch (Exception e)
    {
        migrationDB.Database.Delete();
        AlvinCMSExtension.Helper.Log(e);
    }
}

我不知道我的代码出了什么问题,因为当我使用LocalDb时它很好,但现在我甚至不能连接到我的数据库。

下面是我修复这个问题的尝试:

  1. 我把Persist Security Info = True;Trusted_Connection=False; -仍然产生相同的错误

  2. 我试图改变Database.SetInitializer<AlvinCMSMigrationDBContext>(null);,但我需要创建数据库,如果不存在,所以这不是我的修复

ASP.NET MVC 4 EF6无法连接SQL Server Express数据库

您可以使用如下所示的connection string

<add name="DefaultConnection" connectionString="Server=localhost; Database= 
AlvinCMS;Trusted_Connection=True;" providerName="System.Data.SqlClient" />

在我的例子中"StoreMan"是数据库名称。用你自己的替换。

<add name="StoreMan" providerName="System.Data.SqlClient" connectionString="Server=localhost; Database=StoreMan;Trusted_Connection=True;Integrated Security=True;MultipleActiveResultSets=True"/>