为DataContext设置LINQ DSN

时间:2008-11-04 22:38:43

标签: asp.net linq registry dsn

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

如何做到这一点?

Thanx任何想法!

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

了Christoph

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

1)使用一个方法添加一个新类,该方法继承自原始Datacontext:

Public Class MyDatabaseDataContext

Inherits DatabaseDataContext

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

 End Class

2)在所有Linq数据源中使用此类而不是原始上下文。

 ContextTypeName="MyProject.MyDatabaseDataContext

3 个答案:

答案 0 :(得分:1)

为什么不在web.config中加密?如果您不想使用Application_Start,在aspreg_iis上加密web.config中的连接字符串相当容易。您甚至可以使用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有一个很好的references页面用于加密您的网络配置,但大部分示例都使用aspreg_iis。我更喜欢在Application_Start上这样做,所以我不会忘记在意外加密它。

答案 1 :(得分: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之外的地方我使用连接字符串)。在app启动时,我说ConnectionHolder.ConnectionString =(无论你存储连接字符串的哪个地方)。

答案 2 :(得分:0)

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

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