2

我通常将所有配置存储在注册表中。即使我已经开始使用 LINQ,我也不希望将 DSN 放在 web.config 中,而是让它留在注册表中并将其(可能在应用程序启动事件中)附加到系统配置中。

如何才能做到这一点?

感谢任何想法!

编辑:说清楚:我不想写入 web.config 文件,我只想将 dsn(加密)保存在 web.config 以外的任何地方,所以我在所有开发阶段都有相同的 web.config (本地,staginf,实时,备份)。

克里斯托夫

VB.Net中的解决方案代码:

1)添加一个新类,具有一个方法,它继承自原始数据上下文:

Public Class MyDatabaseDataContext

Inherits DatabaseDataContext

Public Sub New()
    MyBase.New(Settings.DSN)
End Sub

 End Class

2) 在所有 Linq 数据源中使用这个类,而不是原来的上下文。

 ContextTypeName="MyProject.MyDatabaseDataContext
4

3 回答 3

1

为什么不在 web.config 中保持加密呢?如果您不想Application_Start使用aspreg_iis. 之后您甚至可以使用 IIS 管理工具编辑加密的 web.config。

Configuration config = WebConfigurationManager.OpenWebConfiguration(
                               HttpContext.Current.Request.ApplicationPath );
ConfigurationSection section = config.Sections["connectionStrings"];
if (!section.SectionInformation.IsProtected
    && !GlobalConfiguration.ApplicationVersion.EndsWith( "dev" )) // don't encrypt dev
{
    section.SectionInformation.ProtectSection( "DataProtectionConfigurationProvider" );
    config.Save();
}

如果您必须将其存储在注册表中。您始终可以使用 DataContext 上的构造函数,该构造函数采用连接字符串并传入您从注册表中读取的值。大概您会将其存储在应用程序商店中,因此您只需从注册表中读取一次。

Scott Guthrie 有一个很好的参考页面来加密你的 web 配置,尽管大多数示例使用aspreg_iis. 我更喜欢这样做,Application_Start所以我不会忘记意外加密它。

于 2008-11-05T03:12:22.627 回答
1

这就是我所做的。我的 DataContext 有一个基类。它称为 DataContextBase,由 sqlmetal.exe 生成。我有一个名为 DataContext 的派生类,它在我的 Linq 调用中使用。它看起来像这样:

public class DataContext : DataContextBase
{
    public DataContext()
        : base(ConnectionHolder.ConnectionString)
    {
    }
}

我的库中有一个名为 ConnectionHolder 的静态类,它存储连接字符串:

public static class ConnectionHolder
{
    static string _ConnectionString;

    public static string ConnectionString
    {
        get { return _ConnectionString; }
        set { _ConnectionString = value; }
    }
}

(注意:这与 DataContext 是分开的,因为在我的应用程序中 Linq 之外的地方我使用了连接字符串)。在应用程序启动时,我说 ConnectionHolder.ConnectionString = (无论您存储连接字符串的位置)。

于 2008-11-05T15:17:57.000 回答
0

在处理遗留代码时,这是一个相当合理的要求。

DataContext 类是一个分部类,所以我只是添加了一个静态工厂方法来加载配置设置并创建数据上下文结果。

于 2008-11-06T08:03:54.037 回答