我正在使用实体框架迁移、SQL Server CE 4.0,并通过 Clickonce 进行分发。
在我app.config
的,datasource
是DataSource=|DataDirectory|Mydb.sdf
。
<connectionStrings>
<add name="MyContext" connectionString="DataSource=|DataDirectory|Mydb.sdf" providerName="System.Data.SqlServerCe.4.0"/>
</connectionStrings>
当我将它部署到 Windows XP 和 Windows 7 时,数据库将部署到如下所示:
C:\Users\kev\AppData\Local\Apps\2.0\Data\8Y5K2R4J.AM9\Y3D5WADC.HAX\myapp..tion_ab2e572047b7b084_0001.0000_66744c6353cd31ca\Data
问题是 Windows 8 智能屏幕提示,用户点击继续运行,数据库是在 中创建的application(exe) directory
,而不是上面的位置。
如何明确告诉 clickonce 在上面的目录中创建数据库?
发现这个:
由于 Windows 8 智能屏幕,它不起作用。
http://support.microsoft.com/?kbid=920700
|数据目录| 替换字符串支持 |DataDirectory| (括在管道符号中)是指示数据库路径的替换字符串。因此,您不必在代码中包含完整路径。当您在代码中包含完整路径时,您可能会遇到问题,因为完整的数据库路径可以在不同的位置进行序列化。|数据目录| 替换字符串还可以轻松共享项目和部署应用程序。
例如,如果您在代码中包含完整路径,则应用程序可以具有以下连接字符串。
数据源= c:\program files\MyApp\Mydb.sdf 如果你使用 |DataDirectory| 替换字符串,应用程序可以有以下连接字符串。
数据源 = |DataDirectory|\Mydb.sdf 要设置 DataDirectory 属性,请调用 AppDomain.SetData 方法。如果不设置 DataDirectory 属性,将应用以下默认规则来访问数据库文件夹:•对于放在用户计算机上的文件夹中的应用程序,数据库文件夹使用应用程序文件夹。• 对于在 ClickOnce 下运行的应用程序,数据库文件夹使用创建的特定数据文件夹。注意 .NET Compact Framework 不支持基于 Microsoft Windows Mobile 的设备上的 AppDomain.SetData 方法。如果应用程序在基于 Windows Mobile 的设备上调用 AppDomain.SetData 方法,您会收到一条错误消息。