首页 > 解决方案 > ASP.Net MVC 获取角色时无法连接到数据库

问题描述

我正在尝试编写一个 ASP.Net MVC Web 应用程序。几周前,我不得不重新格式化我的开发 PC。当我恢复我的应用程序时,我开始收到一个我以前没有遇到的错误。该错误来自尝试在剃刀视图中获取用户角色。我在 web.config 中启用了角色管理器。我在 startup.cs 添加了角色

        ApplicationDbContext dbContext = new ApplicationDbContext();
        var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(dbContext));

        if (!roleManager.RoleExists("Visitor"))
        {
            var role = new IdentityRole();
            role.Name = "Visitor";
            roleManager.Create(role);
        }

并且角色在数据库中。在我的布局中,导航栏中的链接仅对某些用户可用。运行此代码时会引发错误:

                @if(User.IsInRole("Visitor"))
                {
                    <li>Test</li>
                }

我也试过:

            @if (Roles.IsUserInRole(User.Identity.Name, "Vistor"))
            {
                <li>@Html.ActionLink("VistorArea", "Index", "Toolbox")</li>
            }

我得到的错误是

HttpException:无法连接到 SQL Server 数据库。

SqlException:建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。(提供者:SQL 网络接口,错误:26 - 错误定位服务器/指定的实例)

如果我删除代码,我可以登录并注册,这样它就可以连接到数据库。我试图创建一个新的干净项目并遇到同样的问题。如果有帮助,我可以上传干净的项目。任何帮助表示赞赏!

更新

因此,作为对我可以从数据库中获取数据的问题的回应。当我运行此代码时:

        ApplicationDbContext db = new ApplicationDbContext();
        var test = db.Users.Find("8078ad14-6c09-4c83-baa2-9e14621ceb10");

        if(test.Email == "test@test.com")
        {
            ViewBag.TestString = "Success";
        }
        else
        {
            ViewBag.TestString = "Failure";
        }

它成功了。我的连接字符串看起来像这样

    <add name="DefaultConnection" connectionString="Data Source=(LocalDb)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\aspnet-RoleTest-20180707020513.mdf;Initial Catalog=aspnet-RoleTest-20180707020513;Integrated Security=True"
  providerName="System.Data.SqlClient" />

标签: c#asp.netasp.net-mvc

解决方案


从 web.config 检查您的数据库 connectionString 并检查 IdentityModels.cs

网页配置

 <add name="DefaultConnection" connectionString="Data Source=.; Database=Your Database;uid=sa;password=Your Password;" providerName="System.Data.SqlClient" />

身份模型.cs

public ApplicationDbContext()
    : base("DefaultConnection", throwIfV1Schema: false)
{
}

推荐阅读