【问题标题】:Add a connection string to local user config file throws lock exception向本地用户配置文件添加连接字符串会引发锁定异常
【发布时间】:2013-09-19 05:36:07
【问题描述】:

我开发了一个使用 ADO.NET Entity Framework 存储数据的 WinForm C# 应用程序。

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

在我做了一些研究后,我发现了 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);

几天来我一直在尝试寻找解决这个问题的方法,但除了我正在考虑将连接字符串存储在用户设置中作为一种解决方法之外,我还没有找到任何有用的东西,但感觉有点骇人听闻。

【问题讨论】:

  • 建议另一种方法,请参见:erikej.blogspot.dk/2011/02/…
  • @ErikEJ 看起来很有趣,但我找不到 Visual Studio 安装程序项目。我唯一的选择是InstallShield Limited Edition Project
  • 下载该产品的最新测试版,然后使用它

标签: c# configuration entity-framework-5 sql-server-ce app-config


【解决方案1】:

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

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

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

var entities = new DatabaseEntities(connectionString);

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多