63

在 AppConfig 中可以使用 |DataDirectory|,但我找不到任何文档?

4

6 回答 6

79

|DataDirectory|是一个替换字符串,因此您可以单独配置数据库文件的位置。

所以而不是:

SqlConnection c = new SqlConnection (
   @"Data Source=.\SQLDB; AttachDbFilename=C:\MyDB\Database.mdf;Initial Catalog=Master");

您执行以下操作:

// Set |DataDirectory| value
AppDomain.CurrentDomain.SetData("DataDirectory", "C:\myDB");

// SQL Connection String with |DataDirectory| substitution string
SqlConnection c = new SqlConnection (
   @"Data Source=.\SQLDB; AttachDbFilename=|DataDirectory|\Database.mdf;Initial Catalog=Master");
于 2009-09-11T06:53:52.000 回答
16

在 MSDN 社交论坛中可以找到这个答案

|数据目录| (括在管道符号中)是指示数据库路径的替换字符串。它消除了对导致几个问题的完整路径进行硬编码的需要,因为数据库的完整路径可以在不同的位置进行序列化。DataDirectory 还使共享项目和部署应用程序变得容易。

例如,而不是具有以下连接字符串:

"Data Source= c:\program files\MyApp\Mydb.sdf"

使用 DataDirectory,您可以拥有以下连接字符串:

“Data Source = |DataDirectory|\Mydb.sdf”

要设置 DataDirectory 属性,请调用 AppDomain.SetData 方法。如果不设置 DataDirectory 属性,将应用以下默认规则来访问数据库文件夹:

  • 对于放在用户计算机文件夹中的应用程序,数据库文件夹使用应用程序文件夹。
  • 对于在 ClickOnce 下运行的应用程序,数据库文件夹使用创建的特定数据文件夹。
于 2009-09-11T06:58:53.297 回答
8

不正确的家伙!|数据目录| 指为您的实例配置的 mssql\data 目录。

例如,我将 Visual Studio 2012 与 SQL Express 结合使用。|数据目录| 将所有 MDF 文件放在 C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS\MSSQL\DATA 下,我的 sql express 不是我的解决方案 app_data 文件夹。

该文件也是我的 web.config 中指定的名称 MVCMovie.Models.MovieDBContext 而不是 Movies.mdf。

我认为它需要在 Visual Studio 中的某个位置进行配置,以便将其适当地放置在 app_data 下。

于 2013-04-16T17:45:03.690 回答
4

有一个名为 SqlConnectionHelper 的内部类可以解析这个并在需要时创建 MDF。

这是我能找到的关于该类和 |DataDirectory| 的唯一 MS 文档 宏:http: //msdn.microsoft.com/en-us/library/aa478948.aspx

于 2009-09-11T06:54:22.733 回答
4

http://msdn.microsoft.com/en-us/library/aa478948.aspx

|数据目录| 连接字符串的一部分指定 MDF 文件位于 App_Data 目录中。

于 2012-06-14T17:38:11.100 回答
3

如果您使用的是代码优先迁移,这可能是相关的。

使用 VisualStudio 2013(至少)在运行 Update-Database 命令时,数据目录与当前在 Visual Studio 中配置的“启动项目”相对。

即使您在另一个项目上运行更新数据库(在包管理器控制台上选择),它也会在当前选择的启动项目的 App_Data 上创建您的数据库。

于 2014-07-08T11:15:59.593 回答