如何正确移动.mdf文件的位置并相应地更改连接字符串的数据目录



目前我的SQL数据库已打开

C:UsersSlavenKasaMP.mdf

我想将其移动到我的项目目录中[可能是"数据库"文件夹(?(]并对我的连接字符串进行正确的更改。我的目标是能够在任何计算机上附加.mdf文件打开此项目。我使用的当前连接字符串是EntityFramework生成的,我不确定使此CS指向不同位置的方法是什么。

连接字符串:

<connectionStrings>
    <add name="KasaMPEntities" connectionString="metadata=res://*/OsnovniPodaci.Model.csdl|res://*/OsnovniPodaci.Model.ssdl|res://*/OsnovniPodaci.Model.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=(localdb)v11.0;AttachDbFilename=|DataDirectory|KasaMP.mdf;initial catalog=KasaMP;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;"
      providerName="System.Data.EntityClient" />
  </connectionStrings>

我的项目路径:

C:UsersSlavenDocumentsvisual studio 2013ProjectsPCKasaKasaMP

我在其他帖子中找到了以下行,但我不确定它的作用:

AppDomain.CurrentDomain.SetData("DataDirectory", System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Database"));

我知道我必须将此属性放在连接字符串中的某个位置

AttachDbFileName=|DataDirectory|KasaMP.mdf

关于如何正确执行此操作的任何建议? ^ ^

在 WinForms 应用程序中,DataDirectory 替换字符串指向应用程序启动的文件夹。如果是Visual Studio会话,此文件夹是BIN\DEBUG或BIN\RELEASE文件夹(可能带有x86变体(

这在Visual Studio中运行良好,但你应该知道,在客户PC中,在不更改配置设置的情况下,你应该拥有MDF的文件夹与你的应用相同。
但是,遗憾的是,这个位置没有写入权限(如 C:\program 文件(。任何数据库应用的基本要求。

因此,最好的办法是将此文件放在 CommonApplicationData 文件夹中,您可以使用 Environment.SpecialFolder.CommonApplicationData 枚举检索该文件夹。(在最新版本的Windows中通常是C:\PROGRAMDATA(

string folder = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData);
string myAppFolder = Path.Combine(folder, "MyReservedAppDataFolder");
Directory.CreateDirectory(myAppFolder);
AppDomain.CurrentDomain.SetData("DataDirectory", myAppFolder);

所有这些都应在应用程序中任何与数据访问相关的代码之前完成。当然,您可以保持现在的设置不变,而无需进行任何更改。

最新更新