Доступ к строке подключения из базовой формы вызывает ошибку дизайнера

У меня есть приложение vb.net windows forms, в котором я использую наследование для форм Windows. У меня есть базовая форма, которая предоставляет некоторые из основных макетов и методов, которые будут использоваться со всеми наследующими формами. Это включает инициализацию контекста структуры сущностей в конструкторе базовой формы.

Dim dataContext As New CCEntities()

Затем дочерняя форма может использовать этот контекст. Приложение компилируется и запускается без ошибок, но когда я пытаюсь просмотреть дочернюю форму в конструкторе, отображается сообщение об ошибке: «Указанное именованное соединение либо не найдено в конфигурации, либо не предназначено для использования с Поставщик EntitlyClient или недействителен. "Если я перенесу эту строку инициализации в конструктор дочерней формы, конструктор отобразится без ошибок.

Пытаясь устранить эту проблему, я указал строку подключения во время инициализации в конструкторе базовой формы как:

Dim dataContext As New CCEntities(System.Configuration.ConfigurationManager.ConnectionStrings.Item("CCEntities").ConnectionString)

После добавления этой ссылки в строку подключения в дочерней форме теперь отображается сообщение «Ссылка на объект не соответствует экземпляру объекта».

Однако, если я жестко закодирую строку подключения объекта в эту строку инициализации, конструктор будет работать нормально.

Похоже, что основная форма не может получить доступ к файлу app.config. Как я могу получить базовую форму для правильного доступа к файлу app.config и заставить дизайнер работать должным образом?


person DCNYAM    schedule 26.09.2012    source источник


Ответы (1)


Что вам нужно сделать, так это запретить запуск кода, когда вы находитесь во «режиме разработки».

if(System.ComponentModel.LicenseManager.UsageMode != System.ComponentModel.LicenseUsageMode.Designtime)
{
     //do connection stuff here
}
person iamkrillin    schedule 26.09.2012
comment
Это действительно работает. Можете ли вы объяснить, почему базовая форма не может получить доступ к web.config во время разработки, а дочерняя форма может? - person DCNYAM; 26.09.2012
comment
Или, возможно, лучший вопрос: почему конструктор в базовой форме выполняется во время разработки, а конструктор в дочерней форме - нет? - person DCNYAM; 26.09.2012
comment
На самом деле здесь происходит то, что конструктор не вызывается, когда вы помещаете этот материал в родительский класс. Однако, когда вы создаете отношения подкласса, они должны вызываться. То есть Visual Studio создает родительский класс, а не дочерний класс, с которым вы работаете stackoverflow.com/questions/4546311/ - person iamkrillin; 26.09.2012