0

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

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

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

4

1 回答 1

0

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

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

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

var entities = new DatabaseEntities(connectionString);

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

于 2013-09-19T14:50:59.083 回答