我一直在从事CodeFirst POCO WPF项目,我希望数据库为LocalDB。我使用了迁移(“软件包管理器控制台”窗口中的add-migration和update-database命令)来生成数据库和表。我已将配置文件设置为具有以下连接字符串:

    <add name="MyContext" connectionString="Data Source=(LocalDB)\v11.0;Database=MyDatabase;Integrated Security=True;" providerName="System.Data.SqlClient" />


使用该连接字符串,在控制台中调用update-database之后,它将正确创建数据库和所有表,但是会将MDF文件放在当前登录用户的根目录中。那就是我要改变的行为。我想要在应用程序的文件夹中创建的数据库。我怎么做?

我尝试将“ AttachDBFileName = | DataDirectory | \ MyDatabase.mdf”添加到连接字符串,但是在运行update-database之后,出现此错误:

A file activation error occurred. The physical file name '\MyDatabase.mdf' may be incorrect. Diagnose and correct additional errors, and retry the operation.
CREATE DATABASE failed. Some file names listed could not be created. Check related errors.


如果尝试使用“初始文件名”而不是AttachDBFileName,则会出现相同的错误。看来这只有在文件已经存在的情况下才有效?但我希望在用户首次启动该应用程序时自动生成该文件,并让该文件与该应用程序位于同一文件夹中。我该怎么做呢?

-shnar

最佳答案

这是因为使用DataDirectory的数据文件的默认位置在桌面应用程序的程序文件中。要修改“程序文件”子目录,需要以管理员身份运行程序,或对目录进行适当的写访问。请参阅AppDomain.SetData以将DataDirectory宏设置为实际的%AppData%目录。按照Microsoft最佳实践在程序文件中创建数据文件通常是不必要的。

09-25 18:01
查看更多