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

时间:2013-09-19 05:36:08

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

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

我希望每个用户都有一个数据库存储在他们的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);

我已经尝试过几天寻找这个问题的解决方案,但除了我正在考虑将连接字符串存储在用户设置中而不是作为一种解决方法之外我还没有找到任何有用的东西,但它感觉有点hackish。

1 个答案:

答案 0 :(得分:0)

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

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

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

var entities = new DatabaseEntities(connectionString);

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