【发布时间】:2009-09-11 06:48:23
【问题描述】:
在 AppConfig 中可以使用 |DataDirectory| 但我找不到任何文档?
【问题讨论】:
-
This post 似乎解释得很好。
标签: c# ado.net datadirectory
在 AppConfig 中可以使用 |DataDirectory| 但我找不到任何文档?
【问题讨论】:
标签: c# ado.net datadirectory
|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");
【讨论】:
在MSDN社交论坛this可以找到答案
|数据目录| (括在管道符号中)是指示数据库路径的替换字符串。它消除了对导致几个问题的完整路径进行硬编码的需要,因为数据库的完整路径可以在不同的位置进行序列化。 DataDirectory 还使共享项目和部署应用程序变得容易。
例如,而不是具有以下连接字符串:
"Data Source= c:\program files\MyApp\Mydb.sdf"
使用DataDirectory,可以有如下连接字符串:
“Data Source = |DataDirectory|\Mydb.sdf”
要设置 DataDirectory 属性,请调用 AppDomain.SetData 方法。如果不设置 DataDirectory 属性,将应用以下默认规则来访问数据库文件夹:
【讨论】:
“Data Source = |DataDirectory|”之类的数据库名称的整个路径?所以DataDirectory必须定义为AppDomain.CurrentDomain.SetData("DataDirectory", "c:\program files\MyApp\Mydb.sdf");。
不正确的家伙! |数据目录|指为您的实例配置的 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 下。
【讨论】:
有一个名为 SqlConnectionHelper 的内部类会解析这个并在需要时创建 MDF。
这是我能找到的关于该类和 |DataDirectory| 的唯一 MS 文档宏:http://msdn.microsoft.com/en-us/library/aa478948.aspx.
【讨论】:
http://msdn.microsoft.com/en-us/library/aa478948.aspx
|数据目录|连接字符串的一部分指定 MDF 文件位于 App_Data 目录中。
【讨论】:
如果您使用的是代码优先迁移,这可能是相关的。
使用 VisualStudio 2013(至少)在运行 Update-Database 命令时,数据目录与当前在 Visual Studio 中配置的“启动项目”相对。
即使您在另一个项目上运行更新数据库(在包管理器控制台上选择),它也会在当前选择的启动项目的 App_Data 上创建您的数据库。
【讨论】: