0

我最近将SQL Server Express数据库本地升级到了SQL Server 2012 Developer。我开始得到这个错误。一个快速搜索拉扯吨帖子的答案似乎是从您的连接字符串中删除User Instance=True;获取错误“此版本的SQL Server不支持用户实例登录标志。”但没有使用此标志

我检查过,没有我的连接字符串有这个标志。我试图搜索“用户实例”的整个解决方案,只是为了确保它不会出现在任何地方。双奇怪的是,我没有马上得到这个错误。第一对夫妇打电话给数据库工作...

有没有其他人有类似的经历?

这是导致我的错误的确切代码:

public class BetterAuthorizeAttribute : AuthorizeAttribute 
{ 
    public override void OnAuthorization(System.Web.Mvc.AuthorizationContext filterContext) 
    { 
     var roleList = Roles.Split(','); 

     //if the user is in one of the roles in the list 
     foreach (string r in roleList) 
     { 
      if (filterContext.HttpContext.User.Identity.IsAuthenticated) 
      { 
       //The error is consistently thrown here the second time this line 
       //executes... 
       if (filterContext.HttpContext.User.IsInRole(r.Trim())) 
       { 

下面是配置部分我认为是相关的:

<connectionStrings> 
    <add name="BioSphereContext" 
     providerName="System.Data.SqlClient" 
     connectionString="Server=fake;Database=fake;User ID=fake;Password=fake;Trusted_Connection=False;Encrypt=True;Connection Timeout=30;MultipleActiveResultSets=true;" /> 
</connectionStrings> 

. 
. 
. 

<sessionState mode="InProc" customProvider="DefaultSessionProvider" timeout="15"> 
    <providers> 
    <add name="DefaultSessionProvider" 
     type="System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
     connectionStringName="DefaultConnection" applicationName="/" /> 
    </providers> 
</sessionState> 


. 
. 
. 

<entityFramework> 
    <defaultConnectionFactory 
     type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework"> 
     <parameters> 
      <parameter value="Data Source=.\SQLEXPRESS; Integrated Security=True; MultipleActiveResultSets=True" /> 
     </parameters> 
    </defaultConnectionFactory> 
</entityFramework> 

关于我的情况下,它可以帮助项目更多的细节。 ..

  • VS 2012
  • 实体Framewo RK 5
  • 天青SDK 2.0
  • ASP.NET MVC 3
  • .NET 4.5
+0

你可以添加你的连接字符串/配置(即使你确信它们是正确的吗?) –

+0

在做了一些更多的研究后,我觉得这个错误可能与DefaultSessionProvider有关。这对任何人来说都是一个钟声吗? –

回答

0

不知道什么是错的,但我删除并重新克隆了我的git仓库。错误消失...从来没有得到那一天回来......大声笑。我会离开这个帖子,以防这些对他人有帮助。

1

该代码使用ASP.NET成员角色提供商

if (filterContext.HttpContext.User.IsInRole(r.Trim())) 

在Machine.config显示

  <roleManager> 
      <providers> 
       <add name="AspNetSqlRoleProvider" connectionStringName="LocalSqlServer" applicationName="/" type="System.Web.Security.SqlRoleProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/> 
       <add name="AspNetWindowsTokenRoleProvider" applicationName="/" type="System.Web.Security.WindowsTokenRoleProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/> 
      </providers> 
     </roleManager> 

指向s中的“LocalSqlServer” ame文件

<connectionStrings> 
    <add name="LocalSqlServer" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true" providerName="System.Data.SqlClient"/> 
</connectionStrings> 

存在用户实例。

TODO:将您的roleManager配置为使用其他角色提供者或AspNetSqlRoleProvider来使用不同的连接字符串。

同样适用于会话(什么是DefaultConnection?我没有看到像这样命名的连接字符串),成员资格和配置文件。

所以尝试:

<sessionState mode="InProc" customProvider="DefaultSessionProvider" timeout="15"> 
    <providers> 
    <add name="DefaultSessionProvider" 
     type="System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
     connectionStringName="BioSphereContext" applicationName="/" /> 
    </providers> 
</sessionState> 
+0

我没有machine.config,我的web.config没有roleManager。这就是说我认为我看到它如何适用于我的应用程序的上下文。正如你所建议的,我尝试将会话状态提供程序上的连接设置为BiosphereContext,没有任何影响。我试过注释掉整个会话状态块,在同一行仍然出现相同的错误。所以现在我想知道这是否与它没有任何关系。只有这样,我才能改变消息是从app_data文件夹中删除aspnetdb.mdf。然后我得到“无法连接到数据库”与内部异常关于用户实例标志... bah –

+1

当然你有一个machine.config(C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Config \ machine。 config或C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Config \ machine.config) –

相关问题