ASP.NET MVC möchte, dass ich meine SQL server-databasedateien im App_Data-Ordner speichern soll – sollte ich?

Beim Erstellen einer neuen database mit SQL server Express 2005 werden die databasedateien (.mdf und .ldf) standardmäßig in C:\Program Files\Microsoft SQL server\MSSQL.1\MSSQL\Data gespeichert.

Allerdings, mit den Tutorials, die ich für ASP.NET MVC gesehen habe (zB Nerd Dinner), scheint es üblich zu sein, die databasedateien im ASP.NET-Projekt App_Data Ordner zu halten.

Fragen

  1. Gibt es eine Bedeutung für den Ordner "App_Data" oder ist es nur ein bequemer Ort, um databasedateien zu speichern, wenn Sie Visual Studio Designer verwenden, um eine neue database zu erstellen?
  2. Wird es irgendwelche negativen Auswirkungen geben, wenn ich den Ordner "App_Data" nicht benutzt oder gar lösche?

Aktualisieren

Eine Sache, die ich immer noch nicht bekomme. Wenn du eine Produktionsdatenbank auf dem server hast, warum möchtest du diese database sogar mit dem in App_Data replace. Möchten Sie normalerweise nicht nur Update-Skripte haben, die Sie auf der Produktionsdatenbank ausführen, wenn Sie eine neue Version der App freigeben? Auch für die erste Bereitstellung würde ich lieber Skript-database-Erstellung als physisch kopieren über die fileen. Auch mit SQL server (Express) databaseen ist das Kopieren nicht ausreichend. Sie müssen die database entfernen, um die fileen zu manipulieren und dann wieder anzubringen, wenn Sie fertig sind.

Also muss ich sagen, der Punkt von App_Data entgeht mir immer noch. Kann jemand mich aufklären?

Sie können App_Data ohne negative Auswirkungen löschen, aber wenn es (nach Ordnernamen) in einer ASP.NET-Website existiert, dann hat es die besondere Website, die direkte Verknüpfung zu verweigern, um den Inhalt herunterzuladen – das ist eine securitysfunktion, um Ihre database zu schützen direkt über das Internet heruntergeladen werden (zB durch einen Webbrowser), obwohl es auf der Website existiert. Allerdings kann Ihre Anwendung immer noch auf die fileen im App_Data-Ordner zugreifen, so wie sie auf andere Website-Inhalte zugreifen.

Microsoft sagt es als:

Hinweis: Der Inhalt der Anwendungsordner, mit exception des App_Themes-Ordners, wird nicht als Antwort auf Webanforderungen bedient, sondern kann vom Anwendungscode aus zugegriffen werden.

Microsoft beschreibt ihre speziellen ASP.NET-Ordnerstrukturen einschließlich App_Data hier .

Es gibt eine Reihe von Vorteilen beim Platzieren von databasedateien im Ordner " App_Data ":

  1. Wie einige schon erwähnt haben, ist dieser Ordner sicher von Leuten, die ihn direkt im Internet durchsuchen. Dies gilt auch für die Platzierung der database in Ordnern außerhalb Ihrer Website, though.
  2. Sie können Ihre Anwendung "xcopy deploy" verwenden, indem Sie den gesamten Ordner von Ihrem lokalen Entwicklungscomputer auf Ihre Hosting-Website kopieren.
  3. Verschiedene Komponenten in Visual Studio bieten zusätzliche Unterstützung beim Aufbau Ihrer Anwendung, indem sie Ihre database-fileen gibt. Beispielsweise können Sie auf eine SQL server Express MDF-file doppelklicken und sie im server Explorer automatisch öffnen, damit Sie das Schema der database ändern oder ihre data anzeigen können.

Es ist absolut keine Notwendigkeit , den App_Data-Ordner zu verwenden. Es ist nur ein bequemer Ort, um Ihre database-fileen zusammen mit Ihrer Website zu halten. Die Entscheidung, es zu benutzen oder nicht, ist eher eine Frage der Vorliebe / Politik als alles andere.

Ja, wenn Sie einfach eine Express-database verwenden, die in Ihrem Webroot vorhanden ist, ist es am besten, den Ordner app_data zu verwenden. Der primäre Grund ist, dass die asp .net isapi implizit weiß, dass keine Anfragen für fileen aus diesem Verzeichnis zu erfüllen. Das gleiche gilt für den Ordner app_code. Es gibt keine Bestimmung, dass man aber seine gute Praxis umsichtig sein muss.

Sie können auch sensible xml, Zugriff dbs und alle anderen datadateien hier für zusätzliche security zu speichern.

Ich habe es nur für die lokale Entwicklung verwendet, bevor ich die web.config an einer SQL server-Instanz anstelle der db-fileen zeige.