将连接字符串添加到本地用户配置文件引发锁定异常

本文关键字:配置文件 锁定 异常 用户 字符串 连接 添加 | 更新日期: 2023-09-27 18:31:58

我开发了一个WinForm C#应用程序,该应用程序使用 ADO.NET 实体框架来存储数据。

我希望每个用户在其appdata''local文件夹中存储一个数据库,但是当我尝试将连接字符串添加到用户本地app.config文件中时,我经常收到错误"锁定时无法编辑配置部分属性"。

在我做了一些研究之后,我发现了allowExeDefinition部分设置。我尝试在 app.config 文件和运行时为 connectionString 部分添加此设置(请参阅下面的代码),但每当我尝试保存配置时,我仍然会收到相同的错误。

这是我使用的代码:

var connectionString = string.Format(ConnectionStringBase, dbLocation);
var exeConf = ConfigurationManager
   .OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal);
var connectionStringSettings = 
    new ConnectionStringSettings(
        "DatabaseEntities",
        connectionString,
        ProviderName);
exeConf.ConnectionStrings
    .SectionInformation
    .AllowExeDefinition = ConfigurationAllowExeDefinition.MachineToLocalUser;
exeConf.ConnectionStrings.ConnectionStrings.Add(connectionStringSettings);
exeConf.Save(ConfigurationSaveMode.Minimal);

几天来我一直试图寻找此问题的解决方案,但除了我正在考虑将连接字符串存储在用户设置中作为解决方法之外,我找不到任何有用的东西,但感觉有点黑客。

将连接字符串添加到本地用户配置文件引发锁定异常

好吧,我决定在运行时创建连接字符串并将其传递给实体集构造函数,而不是更新 app.config 文件。

因此,当我初始化实体集时,我改用以下代码:

var connectionString = string.Format(ConnectionStringBase, dbLocation);
var entities = new DatabaseEntities(connectionString);

唯一需要注意的是,如果连接字符串包含" 您应该用单引号 ( ' ) 替换这些 。