【问题标题】:ASP.NET MVC wants me to store my SQL Server database files in the App_Data folder -- should I?ASP.NET MVC 希望我将我的 SQL Server 数据库文件存储在 App_Data 文件夹中——我应该这样做吗?
【发布时间】:2010-01-01 22:10:18
【问题描述】:

使用 SQL Server Express 2005 创建新数据库时,数据库文件(.mdf 和 .ldf)默认存储在 C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data 中。

但是,在我看到的 ASP.NET MVC 教程(例如,Nerd Dinner)中,将数据库文件保存在 ASP.NET 项目的 App_Data 文件夹中似乎是一种常见的做法。

问题

  1. App_Data 文件夹是否有任何意义,或者如果您碰巧使用 Visual Studio 的设计器创建新数据库,它是否只是一个方便存储数据库文件的地方?
  2. 如果我不使用甚至删除 App_Data 文件夹,会不会有负面影响?

更新

有一件事我仍然没有得到。如果您在服务器上有一个生产数据库,您为什么还要想要用 App_Data 中的数据库替换这个数据库。当您发布应用程序的新版本时,您通常不想在生产数据库上运行更新脚本吗?即使对于初始部署,我也宁愿脚本数据库创建而不是物理复制文件。此外,对于 SQL Server (Express) 数据库,复制是不够的。您必须分离数据库以操作文件,然后在完成后重新附加。

所以,我不得不说,App_Data 的意义仍然没有引起我的注意。有人能启发我吗?

【问题讨论】:

  • 关于你的更新,好点子!我将对 App_Data 的可行情况进行最后一次尝试。经验中的两个想法:(1.)在一个 DB Admin 和 Programmer 角色定义明确且分开的组织中,App_Data 让网站开发人员在开发中使用数据库,而无需经历/等待 DBA 角色做事,因为一切都是网络开发机器的本地内容。 (2.) 当您将 Web 应用程序上传到第三方托管公司进行生产时,他们通常不会让您访问他们的数据库服务器(与 Web 服务器计算机分开)。
  • (评论室用完了)...总体而言,App_Data 为全球的 asp.net 开发人员提供了更多选项,尽管您现在可能找不到在您的特定情况下使用这些选项的充分理由。

标签: asp.net sql-server asp.net-mvc sql-server-2005 sql-server-express


【解决方案1】:

您可以删除 App_Data 而不会产生任何负面影响,但是当它(按文件夹名称)存在于 ASP.NET 网站中时,它具有不允许直接链接下载其内容的特殊网站功能 - 这是一项保护的安全功能即使您的数据库存在于网站中,也不会直接通过网络(例如通过网络浏览器)下载您的数据库。但是,您的应用程序仍然可以访问 App_Data 文件夹中的文件,就像它访问其他网站内容一样。

微软称它为:

注意:申请内容 文件夹,App_Themes 除外 文件夹,不响应于 网络请求,但可以访问 来自应用程序代码。

微软描述了他们特殊的 ASP.NET 文件夹结构including App_Data here

【讨论】:

  • 感谢您的回答...不过有几个问题:您是说存储在Program Files 中的数据可以 直接下载吗?或者您只是说,如果我希望我的应用程序代码能够直接访问这些文件,保存它们的安全位置是 App_Data 文件夹?最后,为什么我希望我的应用程序直接访问 SQL Server 数据库文件(而不是通过服务器上的查询)?
  • 无法直接下载 Web 应用程序文件夹之外的数据(除非您以某种方式明确使其可用)。
  • 我根据后续问题修改了答案,使其更加清晰。就像您硬盘上的任何其他文件夹一样,“程序文件”无法下载,除非它是您网站的一部分,由网络服务器提供服务,并且文件权限允许。
  • App_Data 的优势在于它比“程序文件”之类的更便携,并且可以使用 Web 应用代码中的相对路径进行访问。
  • 您可以使用数据库查询直接访问数据库,无论它是位于硬盘上的基于文件的数据库(例如在 App_Data 中)还是在服务器上运行的数据库。如果您的数据库在服务器上运行,则它不是位于您网站内的基于文件的数据库。使用基于文件的数据库,您可以方便地将其与您的网站一起移动;使用 App_Data 文件夹,您可以获得额外的便利,无需将其暴露在 Internet 上 - 如果位于常规文件夹(例如提供网页的位置)中,它将被暴露。
【解决方案2】:

将数据库文件放在App_Data 文件夹中有很多优点:

  1. 正如一些人所提到的,该文件夹对于直接在网络上浏览它的人来说是安全的。不过,将数据库放在网站外部的文件夹中也是如此。
  2. 您可以通过将整个文件夹从本地开发计算机复制到托管网站来“xcopy 部署”您的应用程序。
  3. Visual Studio 中的各种组件可以通过在其中放置数据库文件来为构建应用程序提供额外帮助。例如,您可以双击 SQL Server Express MDF 文件并在服务器资源管理器中自动打开它,这样您就可以更改数据库的架构或查看其数据。

【讨论】:

  • +1 很好的答案,谢谢。不过,我对#2有点困惑。 这不会因为 SQL Server 要求您必须先分离数据库才能移动/删除/替换数据库文件而失败吗? 通常,我编写我的数据库脚本,这样我就可以运行该脚本在主机上,一切正常。如果我使用的是 Access 数据库,#2 似乎更有帮助,但我无法看到 SQL Server (Express) 数据库的附加值。
【解决方案3】:

绝对没有需要来使用 App_Data 文件夹。它只是一个方便的地方,可以将您的数据库文件与您的站点保存在一起。是否使用它的决定更多的是偏好/政策问题。

【讨论】:

    【解决方案4】:

    是的,当您只是使用将存在于您的 webroot 中的 express 数据库时,最好使用 app_data 文件夹。主要原因是 asp .net isapi 隐含地知道不满足来自该目录的文件的任何请求。 app_code 文件夹也是如此。没有规定是必须的,但谨慎行事是一种良好的做法。

    您还可以在此处存储敏感的 xml、访问 dbs 和任何其他数据文件以增加安全性。

    在将 web.config 指向 SQL 服务器实例而不是 db 文件之前,我只将它用于本地开发。

    【讨论】:

      猜你喜欢
      • 2020-08-25
      • 1970-01-01
      • 2023-03-19
      • 2010-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-03
      相关资源
      最近更新 更多