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

Posted

技术标签:

【中文标题】ASP.NET MVC 4 EF6 无法连接到 SQL Server Express 数据库【英文标题】:ASP.NET MVC 4 EF6 cannot connect to SQL Server Express database 【发布时间】:2016-09-10 07:46:15 【问题描述】:

当我从 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 时很好,但现在我什至无法连接到我的数据库。

这是我解决此问题的尝试:

    我输入了Persist Security Info = True;Trusted_Connection=False; - 仍然产生同样的错误。

    我尝试更改Database.SetInitializer&lt;AlvinCMSMigrationDBContext&gt;(null); 但如果不存在我需要创建数据库,所以这不是我的解决方案

【问题讨论】:

你用来连接的用户应该有管理员权限,尝试为这个用户分配以下角色dbcreator和sysadmin并尝试 即使初始化器为 null,如果数据库不存在,您也可以创建它。 Trusted_Connection=False 不会从您的连接字符串中删除凭据,但是您很可能没有提供正确的凭据,请尝试使用 Trusted_Connection=True,因此将使用 Windows 身份验证。 【参考方案1】:

您可以使用connection string,如下所示。

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

以上是关于ASP.NET MVC 4 EF6 无法连接到 SQL Server Express 数据库的主要内容,如果未能解决你的问题,请参考以下文章

在 ASP.NET MVC 项目中无法使用实体框架连接到 Oracle 数据库

如何使用 MVC3 ASP.NET 4.5 和 EF6 基于实体属性注释对 TextBoxFor 进行舍入

构建ASP.NET MVC5+EF6+EasyUI 1.4.3+Unity4.x注入的后台管理系统--工作流演示截图

ASP.NET MVC5+EF6搭建三层实例

ASP.NET Core MVC:使用 SQL Server 身份验证连接到现有数据库

构建ASP.NET MVC5+EF6+EasyUI 1.4.3+Unity4.x注入的后台管理系统(57)-插件---ueditor使用