ASP.NET MVC希望我将我的SQL Server数据库文件存储在App_Data文件夹中 - 我应该吗?

时间:2010-01-01 22:10:19

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

使用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文件夹会不会有任何负面影响?
  3. 更新

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

    所以,我不得不说,App_Data的观点仍然让我感到厌烦。有人可以开导我吗?

4 个答案:

答案 0 :(得分:5)

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

Microsoft将其声明为:

  

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

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

答案 1 :(得分:2)

将数据库文件放在App_Data文件夹中有很多好处:

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

答案 2 :(得分:1)

绝对没有需要来使用App_Data文件夹。这是将数据库文件与您的站点保持在一起的便利位置。使用与否的决定更多地取决于偏好/政策而非其他任何事情。

答案 3 :(得分:0)

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

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

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