Установить LINQ DSN для DataContext - PullRequest
2 голосов
/ 05 ноября 2008

Я обычно храню все свои конфиги в реестре. Несмотря на то, что я начал использовать LINQ, я не хотел бы иметь DSN в файле web.config, а скорее оставить его в реестре и присоединить его (возможно, в событии запуска приложения) к конфигурации системы.

Как это можно сделать?

Спасибо за любые идеи!

edit: чтобы было понятно: я не хочу писать в файл web.config, я просто хочу сохранить dsn (зашифрованный) где-то еще, кроме web.config, поэтому у меня есть тот же web.config все этапы разработки (локальный, staginf, live, backup).

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 ]

1 голос
/ 05 ноября 2008

Вот что я делаю. У меня есть базовый класс для моего 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 = (где вы храните строку подключения).

1 голос
/ 05 ноября 2008

Почему бы просто не сохранить его в зашифрованном виде в файле web.config? Довольно просто зашифровать только строки подключения в web.config на Application_Start, если вы не хотите использовать aspreg_iis. Впоследствии вы даже можете редактировать зашифрованный файл web.config с помощью инструмента IIS Admin.

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, который принимает строку подключения и передает значение, считанное из реестра. Предположительно, вы бы сохранили это в хранилище приложений, поэтому вам нужно будет только один раз прочитать данные из реестра.

Скотт Гатри имеет хорошую страницу ссылок для шифрования вашей веб-конфигурации, хотя в большинстве примеров используется aspreg_iis. Я предпочитаю делать это на Application_Start, поэтому я не забываю зашифровать его случайно.

0 голосов
/ 06 ноября 2008

Это довольно разумное требование при работе с устаревшим кодом.

Класс DataContext является частичным классом, поэтому я просто добавляю статический метод фабрики, который загружает параметр конфигурации и создает результат datacontext.

...