【问题标题】:ASP.NET Identity DbContext Issue with EF Code First MigrationsEF Code First 迁移的 ASP.NET Identity DbContext 问题
【发布时间】:2016-06-10 02:52:49
【问题描述】:

编辑2: 我使用这个“Data Source=(LocalDB)\MSSQLLocalDB”作为连接字符串,一切都按预期工作。我想我在用 sqlexpress 做一些愚蠢的事情。


我正在尝试为用户创建一个简单的数据库,使用 ASP.NET(4.5) Identity(2.2) 和 EF(6) Code First 迁移,基于this tutorial

仅当 ApplicationDbContext 继承自 IdentityDbContext 时才会出现此问题。

所以,首先,我创建一个空的 asp.net 项目。 然后是用户的实体类:

using Microsoft.AspNet.Identity.EntityFramework;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;

namespace AspNetIdentity.Infrastructure
{
  public class ApplicationUser : IdentityUser
  {
    [Required]
    [MaxLength(100)]
    public string FirstName { get; set; }

    [Required]
    [MaxLength(100)]
    public string LastName { get; set; }

    [Required]
    public byte Level { get; set; }

    [Required]
    public DateTime JoinDate { get; set; }

  }
}

然后我创建 DbContext 类:

   public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext()
        : base("DefaultConnection")
    {

    }

    public static ApplicationDbContext Create()
    {
        return new ApplicationDbContext();
    }

}

到目前为止一切顺利。现在问题来了: 我在 web.config 中添加连接字符串如下所示

<connectionStrings>
  <add name="DefaultConnection" connectionString="Data      
  Source=.\sqlexpress;Initial Catalog=AspNetIdentity;Integrated    
  Security=SSPI;" providerName="System.Data.SqlClient" />
</connectionStrings>

当我跑步时

enable-migrations

我收到以下错误:

访问数据库时出错。这通常意味着与数据库的连接失败。检查连接字符串是否正确,以及是否使用了适当的 DbContext 构造函数来指定它或在应用程序的配置文件中找到它。有关 DbContext 和连接的信息,请参阅 http://go.microsoft.com/fwlink/?LinkId=386386。有关失败的详细信息,请参阅内部异常。

如果我尝试完全相同的事情,但使用正常的 DbContext,一切都会按预期进行。有什么想法我可能做错了吗?这件事困扰我好几天了。


编辑1: 下面是控制台中的完整输出,它很大,所以我将它们作为图像附加,我希望没问题。

如果那里的错误太明显,我很抱歉,但我是新手:)

【问题讨论】:

  • 您不是偶然在与包含上下文的程序集不同的程序集的配置文件中定义连接字符串吗?
  • 如果您的 EF 代码位于单独的程序集中,则需要一个连接字符串来从位于同一程序集 (app.config) 中的 PM 控制台运行事物,然后需要一个连接字符串用于 Web配置何时部署。
  • @WiktorZychla 一切都在同一个项目中。我其实只是按照我发布的教程一步一步来的。
  • @Nikki9696 一切都在同一个项目中。我其实只是按照我发布的教程一步一步来的。
  • 所以你的连接字符串不再是SQL Server Express,而是LocalDB,它与Visual Studio一起安装(和SQL Server Express非常相似)。您似乎实际上没有安装 SQL Server Express 实例。

标签: c# asp.net entity-framework asp.net-identity


【解决方案1】:

我是 ASP.NET 的新手,但我已修改 connectionStrings 以使用 localdb:

<connectionStrings>
    <add name="DefaultConnection" 
      connectionString="Server=(localdb)\v11.0;Integrated Security=true;"
      providerName="System.Data.SqlClient" />
</connectionStrings>

【讨论】:

    【解决方案2】:

    在 Visual Studio 中按 control+alt+s 并检查 You see Your Db in Data Connections , 同样在解决方案资源管理器中单击“显示所有文件”并检查 App_Data 文件夹。 如果您没有看到您的数据库或您看到不同的数据库名称,则问题出在您的连接字符串中。 如果您只是在测试数据库连接并且没有重要数据,请尝试删除迁移文件夹并重命名连接字符串中的基本连接和默认连接。 在此之后启用迁移,添加迁移,然后更新您的数据库。 希望它可以帮助干杯!

    【讨论】:

      【解决方案3】:

      关于 SQL Express,通常有两件事不要忘记:启用 TCP/IP 协议 + 启用并启动 SQL Browser windows 服务。防火墙也可能是原因。请查看article 是否对您有帮助。

      【讨论】:

        猜你喜欢
        • 2016-08-04
        • 1970-01-01
        • 2011-10-26
        • 1970-01-01
        • 2020-09-27
        • 1970-01-01
        • 2011-08-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多