【发布时间】: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