MVC 4中的SQL Server Express数据库文件自动创建错误 - 但我不想使用SQL Server Express

Car*_*rio 5 asp.net-mvc ef-code-first

我刚刚在ASP.Net MVC 4中部署了一个新的应用程序.我使用的是SQL Server 2008 R2(不是SQL Express).

它在前10分钟工作得很好,然后我对代码进行了一些改动并重新部署了它.

现在,每当我尝试访问使用SimpleMembership的页面时,我都会收到此错误:

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

描述:执行当前Web请求期间发生未处理的异常.请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息.

SQLExpress数据库文件自动创建错误:
连接字符串使用应用程序的App_Data目录中的数据库位置指定本地Sql Server Express实例.提供程序尝试自动创建应用程序服务数据库,因为提供程序确定数据库不存在.要成功检查应用程序服务数据库是否存在并自动创建应用程序服务数据库,必须满足以下配置要求:

但是,我使用SQL Server Express.在我的web.config设置所有连接字符串如下:

<add name="ApplicationServices" 
     connectionString="Server=myServer;Database=myDB;User Id=myUserID;Password=myPWD;" 
     providerName="System.Data.SqlClient" />

<add name="ApplicationServices" 
     connectionString="Server=myServer;Database=myDB;User Id=myUserID;Password=myPWD;" 
     providerName="System.Data.SqlClient" />
Run Code Online (Sandbox Code Playgroud)

为什么它一直在尝试创建SQL Server EXPRESS数据库?

See*_*rai 5

当我遇到这个错误时,发现事情很简单。我终于发现在我的 _Layout.cshtml 中我正在引用User.IsInRole("role")但在Request.isAuthenticated. 我的代码看起来像这样@if (Request.isAuthenticated && User.IsInRole("role"))。所以基本上,如果我没有登录主页,就会呈现,因为它不会遍历调用IsInRole()(这需要初始化简单的成员资格,否则我会收到您在这里提到的错误。所以基本上我需要确保每个每个使用扩展 _Layout 文件的视图并可能拥有未经身份验证的用户的控制器都需要有一个[InitializeSimpleMembership]. 或初始化简单成员资格的各种方法之一。

所以像

namespace ProjectName.Controllers
{
    [InitializeSimpleMembership]
    public class HomeController : Controller {
...
Run Code Online (Sandbox Code Playgroud)

另外,我经常使用 Ctrl + F5 启动应用程序,然后使用“重建解决方案”。当我刷新不是根主页的页面时,我会收到错误,直到我调用根主页。到那时,一切都会重新开始。

希望这会对您或某人有所帮助。我撞了至少一两个小时的头。


小智 4

您还有这个问题吗?另外,为什么 ApplicationServices 列出了两次?

不久前我遇到了同样的事情。我缺少 web.config 中的成员资格和角色配置。

<membership defaultProvider="AspNetSqlMembershipProvider">
  <providers>
    <clear />
    <add name="AspNetSqlMembershipProvider"
         type="System.Web.Security.SqlMembershipProvider"
         connectionStringName="ApplicationServices"
         enablePasswordRetrieval="false"
         enablePasswordReset="true"
         requiresQuestionAndAnswer="false"
         requiresUniqueEmail="false"
         maxInvalidPasswordAttempts="5"
         minRequiredPasswordLength="6"
         minRequiredNonalphanumericCharacters="0"
         passwordAttemptWindow="10"
         applicationName="Test" />
  </providers>
</membership>
<roleManager enabled="true" defaultProvider="SqlRoleManager">
  <providers>
    <add name="SqlRoleManager"
         type="System.Web.Security.SqlRoleProvider"
         connectionStringName="ApplicationServices"
         applicationName="Test" />
  </providers>
</roleManager>
Run Code Online (Sandbox Code Playgroud)