Sql server 如何在ASP MVC4应用程序中不使用App_数据文件夹?

Sql server 如何在ASP MVC4应用程序中不使用App_数据文件夹?,sql-server,asp.net-mvc,forms-authentication,Sql Server,Asp.net Mvc,Forms Authentication,本地的一切都很好,但是当我发布时,我得到了下面的错误。我使用的是表单身份验证,但我定义了自己与非sqlexpress数据库的连接字符串。我不明白为什么我的应用程序需要访问才能在App_Data文件夹中创建数据库(或其他任何内容),因为我的数据库不在/不会在那里。感谢您的帮助 连接字符串: <connectionStrings> <add name="DataContext" providerName="System.Data.SqlClient" connectionS

本地的一切都很好,但是当我发布时,我得到了下面的错误。我使用的是表单身份验证,但我定义了自己与非sqlexpress数据库的连接字符串。我不明白为什么我的应用程序需要访问才能在App_Data文件夹中创建数据库(或其他任何内容),因为我的数据库不在/不会在那里。感谢您的帮助

连接字符串:

<connectionStrings>
    <add name="DataContext" providerName="System.Data.SqlClient" connectionString="Data Source=localhost;Initial Catalog={my db};Integrated Security=SSPI;MultipleActiveResultSets=True" />
</connectionStrings>

错误:

创建App_数据子目录时拒绝访问

描述:出于安全原因,标识“IIS APPPOOL\ASP.NET v4.0”(此web应用程序在其下运行)没有在应用程序根目录中创建App_数据子目录的权限。ASP.NET将用于服务(如成员资格和配置文件)的Microsoft SQL Express数据库文件存储在应用程序的App_Data子目录中


编辑:它告诉我如何通过添加App_数据文件夹并提供正确的权限来修复错误,但我完全不理解为什么需要此文件夹,如果我可以避免更改权限,我会这样做。

检查web.config中“membership”节点的“connectionstring”属性是否设置为您的connectionstring,像这样:

<membership defaultProvider="DefaultMembershipProvider">
  <providers>
    <add name="DefaultMembershipProvider" 
         type="System.Web.Providers.DefaultMembershipProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
         connectionStringName="DataContext"
         enablePasswordRetrieval="false" 
         enablePasswordReset="true" 
         requiresQuestionAndAnswer="false" 
         requiresUniqueEmail="false" 
         maxInvalidPasswordAttempts="5" 
         minRequiredPasswordLength="6" 
         minRequiredNonalphanumericCharacters="0" 
         passwordAttemptWindow="10" 
         applicationName="/" />
  </providers>
</membership>

我想我终于找到了阻止ASP尝试在App_数据文件夹中自动创建ASPNETDB.MDF数据库的方法。我的发现结合了两个现有的stackoverflow答案:

事实证明,在生产机器上,SQL成员资格提供程序是在machine.config中定义的。我认为ops团队没有改变默认Windows 2008安装的任何内容,因此对于该平台来说,通常情况下可能就是这样

要删除对在更高级别上定义的任何SQL提供程序的引用,请在web.config中包含以下内容

<membership>
    <providers>
        <clear />       
    </providers>
</membership>
<roleManager enabled="false">
    <providers>
        <clear />       
    </providers>
</roleManager>
<profile>
    <providers>
        <clear />       
    </providers>
</profile>

要禁用“SimpleMembership”,您可以使用value=“false”(web.config)添加应用程序设置enableSimpleMembership。这将阻止webmatrix重新配置角色管理器

<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
    <appSettings>
        <add key="enableSimpleMembership" value="false" />
    </appSettings>
</configuration>

*
*

感谢您的反馈,Stephen。我想我包括了一个nuget包或者一些引用或自动包含DefaultMembershipProvider的东西,尽管我没有在我的项目中使用它。理想情况下,我试图完全摆脱它,这样我就不需要App_Data文件夹来存储任何文件/localdb。如果不使用它,可以将其从web.config中删除。仅此而已,我的web.config中没有引用它。显然它在machine.config文件中(我不熟悉这个),我不想更改任何可能影响其他应用程序/未来开发的内容。很高兴你找到了答案:)
*<membership>
    <providers>
        <clear />       
    </providers>
</membership>
<roleManager enabled="false">
    <providers>
        <clear />       
    </providers>
</roleManager>
<profile>
    <providers>
        <clear />       
    </providers>
</profile>*