实体框架从用户的应用程序数据文件夹中读取SQLite数据库

时间:2013-10-04 09:46:15

标签: .net entity-framework sqlite deployment windows-installer

我为我的.NET应用程序创建了安装程序项目。安装程序还将所需的SQLite文件安装到特殊文件夹中 - >用户的应用程序数据漫游文件夹(C:\ Users \ Xxxx \ AppData \ Roaming \ MyCompany)。

应用程序使用Entity Framework访问该SQLite文件,在开发过程中,我已将Entity Framework配置为在本地计算机文件夹中使用SQLite。我不知道如何配置Entity Framework来读取/写入用户的应用程序数据文件夹。

1 个答案:

答案 0 :(得分:0)

SQLite文件的连接字符串不允许相对路径。 部署应用程序时,您有两个选项:

1-在ur app.config相关文件中手动更改您的SQLite数据库文件的路径 - > connectionString部分。 我认为这不是一个干净的解决方案。

2-尝试在应用程序启动时或部署时以编程方式更改配置。这里有一个如何实现的示例代码:

string _EntityContainerName = "";//Ur entity container name
                Configuration _Configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
                //DataSource
                System.Data.SQLite.SQLiteConnectionStringBuilder _SqlBuilder = new System.Data.SQLite.SQLiteConnectionStringBuilder();
                _SqlBuilder.DataSource = @"C:\Users\Xxxx\AppData\Roaming\MyCompany\{UrSQLiteFileName}.s3db";
                string _ProviderString = _SqlBuilder.ToString();
                //ConnectionString
                EntityConnectionStringBuilder _DataEntityBuilder = new EntityConnectionStringBuilder();
                _DataEntityBuilder.Provider = "System.Data.SQLite";
                _DataEntityBuilder.ProviderConnectionString = _ProviderString;
                _DataEntityBuilder.Metadata = string.Format(@"res://*/{0}.csdl|res://*/{0}.ssdl|res://*/{0}.msl", _EntityContainerName);
                string _DataConnectionString = _DataEntityBuilder.ToString();
                _Configuration.ConnectionStrings.ConnectionStrings[_EntityContainerName].ConnectionString = _DataConnectionString;
                _Configuration.ConnectionStrings.ConnectionStrings[_EntityContainerName].ProviderName = "System.Data.EntityClient";
                _Configuration.Save(System.Configuration.ConfigurationSaveMode.Modified, true);
                ConfigurationManager.RefreshSection("connectionStrings");

希望会有所帮助。