我开发了一个使用SQL数据库的应用程序。我的挑战是能够使用应用程序本身运送数据库。当我使用安装程序打包我的mdf文件时,它将被部署。但是它无法连接到它。 我已经将以下作为先决条件
安装时,它会下载并安装所有先决条件。 我也使用以下连接字符串连接到它。
<connectionStrings><add name="MyDBContext" connectionString="metadata=res://*/MyModel.csdl|res://*/MyModel.ssdl|res://*/MyModel.msl;provider=System.Data.SqlClient;provider connection string=" Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\MyDB.mdf; MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" /></connectionStrings>
安装在我的机器上时此设置正常。知道这对简单的机器有什么用吗?
答案 0 :(得分:1)
最后我改变了很多东西后才开始工作。首先,连接字符串本身。这是
<connectionStrings><add name="MyDBContext" connectionString="metadata=res://*/MyModel.csdl|res://*/MyModel.ssdl|res://*/MyModel.msl;provider=System.Data.SqlClient;provider connection string=" Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\MyDB.mdf; MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" /></connectionStrings>
但由于在安装过程中只在目标计算机上安装了SQL Express 2012(请参阅上面的图片),因此无法正常工作。所以改了它,以便它使用SQLServer Express的默认实例名称
<connectionStrings><add name="MyDBContext" connectionString="metadata=res://*/MyModel.csdl|res://*/MyModel.ssdl|res://*/MyModel.msl;provider=System.Data.SqlClient;provider connection string=" Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|MyFolder\MyDB.mdf; User Instance=True; Integrated Security=SSPI; MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" /></connectionStrings>
请注意我在| DataDirectory |之后添加了一个文件夹。想法是在 AppData 中创建一个文件夹,这样它最终会在 C:\ users \ me \ AppData \ MyFolder \ MyDB.mdf
中创建一个文件夹我还将User Instance设置为true,否则它无法从AppData文件夹中运行。
接下来,我添加了代码以将DataDirectory更新到我想要的位置,该位置位于AppData文件夹中
AppDomain.CurrentDomain.SetData("DataDirectory",Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData));
我在程序文件的主要部分中进行了此更改