安装Application时,Sqlite数据库文件位置会更改

时间:2017-12-11 11:17:15

标签: c# winforms sqlite

我遇到了大麻烦,因为我的Sqlite数据库文件存储在用户/ AppData /本地/虚拟商店/程序文件目录中,而不是存储在程序文件中。在创建安装程序期间,我已将默认安装路径设置为 C:\ Program Files 。任何人都可以告诉我如何将数据库文件存储在程序文件中。由于此问题,我的应用程序每次在用户打开应用程序时重新创建数据库,因为它无法找到数据库文件。提前谢谢......

2 个答案:

答案 0 :(得分:0)

我建议您在app.config配置文件中传递路径信息。例子

<appSettings>
    <add key="dbpath" value="c:/program files" />
  </appSettings>

并从config读取路径。

public static string GetConfigurationValue()
{
    if(ConfigurationManager.AppSettings["dbpath"]!=null)
      return ConfigurationManager.AppSettings["dbpath"];
    else 
      return string.Empty;
}

答案 1 :(得分:0)

感谢您的提问。我也遇到了在UWP应用程序的bin / debug中创建文件的问题,运行sqlite EF核心。这就是我找到解决方案的方式。

我发现完全避免程序目录和权限问题,在我的情况下。对于这些类型的情况有一个很好的处理程序,其中sqlite文件总是在同一个地方创建,但是相当模糊,带有guid目录

C:\Users\(me)\AppData\Local\Packages\7ef58417-7e0c-4365-a1b8-0bdb6ea01c64_mdkyq2wgmdezj\LocalState

这将检查sqlite db文件是否存在,如果不存在则创建它,EF核心创建表。然后我api调用填充帐户表。

            using (var dbi = new TimeTrackerUwpContext())
            {
                var databaseCreator = (RelationalDatabaseCreator)dbi.Database.GetService<IDatabaseCreator>();
                if (!databaseCreator.Exists())
                    await databaseCreator.EnsureCreatedAsync();
                else
                    dbi.Database.ExecuteSqlCommand("DELETE FROM [Account];");
                var acc = GetAccoutsToSync().Result;
                if (acc.Count == 0)
                    return;
                await dbi.Account.AddRangeAsync(acc);
                await dbi.SaveChangesAsync();
            }

我还必须创建一个类库,以我想要的方式运行EF核心,其中包含模型     等待databaseCreator.EnsureCreatedAsync(); 使用

enter image description here

我希望这会有所帮助。