LINQ to SQL DataContext и проблемы с соединением - PullRequest
1 голос
/ 05 февраля 2010

Я использую LINQ to SQL для своего сайта для доступа к двум базам данных. Первая база данных - это данные веб-сайта (который я назову WEBSITE), вторая - история транзакций (которую я назову WEBSITE_HISOTRY). Когда я не так давно добавил таблицу из WEBSITE_HISOTRY в свой текстовый текст, я получил какое-то предупреждение, на которое я нажал OK (вероятно, не самая лучшая идея). Я помню, что Visual Studio жаловался, что соединение с базой данных отличается от моего конфига или что-то в этом роде. Все работало нормально, пока я не опубликовал на своем сервере. Я продолжал получать ошибку «База данных не найдена», и когда я регистрировал строки подключения, я обнаружил это.

WEBSITE_HISTORY

Источник данных = MYCOMPUTER \ SQLEXPRESS; Первоначальный каталог = WebSiteHistory; Интегрированная безопасность = TRUE

ВЕБ-САЙТ

Источник данных = my.dyndns.net; Сетевая библиотека = DBMSSOCN; Исходный каталог = Сайт; Идентификатор пользователя = WebsiteUser; Пароль = *******;

Я также обнаружил, что для конструктора текста данных WEBSITE_HISTORY требовалась строка подключения (в отличие от веб-сайта, который имеет конструктор без параметров). Я изменил конструктор, но каждый раз, когда я добавляю таблицу к тексту данных, она меняется обратно. Я прочитал в другом вопросе об установке свойств соединения DataContext в Application = true. Я пробовал это, но я не могу установить "Имя свойства настроек" на правильное соединение.

Я не уверен, что я сделал, подстрекать это поведение. Любая помощь будет принята с благодарностью.

Ответы [ 3 ]

0 голосов
/ 05 февраля 2010

В контексте данных должно быть доступно несколько перегруженных конструкторов; один из них запрашивает строку подключения. Я бы рекомендовал использовать это все время; причина в том, что это позволяет вам перейти к новой базе данных с такой же структурой, и она будет работать таким образом. Я стремлюсь создать статический класс для создания своих классов контекста данных, чтобы сделать это проще:

public static class ContextCreator
{
   public static CustomDataContext Create()
   {
     return new CustomDataContext(ConfigurationManager.ConnectionStrings["CName"].ConnectionString);
   }
}
0 голосов
/ 08 февраля 2010

Я сдался и перестал бороться с дизайнером. Сейчас я передаю строку подключения, как предложил Брайан (то есть DataAccess.Properties.Settings.Default.WEBSITEHISTORY_ConnectionString), и это работает. Когда я проверил файл свойств, я обнаружил, что в свойстве WEBSITE_HISTORY отсутствует это

[global::System.Configuration.SpecialSettingAttribute(global::System.Configuration.SpecialSetting.ConnectionString)]

Я еще не изучал его, но держу пари, что это заставило его использовать подключение по умолчанию в моих свойствах DataAccess, а не веб-конфигурацию.

Согласно комментариям Брайана, сценарий, который он описал, - это то, с чем, я полагаю, это и началось.

Спасибо за помощь!

0 голосов
/ 05 февраля 2010

То, что вы сделали, не сработает. Контекст базы данных - это соединение с одной базой данных. Вы не должны пытаться добавлять таблицы из других баз данных в определенный контекст. На самом деле, это, вероятно, просто не будет работать. Если вы сталкиваетесь с несколькими базами данных, вам понадобится несколько объектов контекста базы данных, по одному для каждой базы данных.

Кстати, я думаю, вы обнаружите, что получите больше ответов на свои вопросы, если примете больше ответов на свои вопросы в качестве ответов. Ваш уровень принятия составляет всего около 25%. Это может отговорить людей отвечать вам.

...