EF в UserControl не может видеть app.config?
Я только что создал пользовательский элемент управления. Этот элемент управления также использует мой статический класс Entity Framework для загрузки двух комбинированных списков. Все хорошо и работает без проблем. Дизайн и время работы работают. Затем, когда я останавливаю приложение, все формы, которые содержат мой UserControl, больше не работают во время разработки. Я просто вижу две ошибки:
Ошибка 1: указанное именованное соединение либо не найдено в конфигурации, не предназначено для использования с поставщиком EntityClient, либо недопустимо.
Ошибка 2: переменная ccArtikelVelden
либо не объявлен, либо никогда не назначался.
(ccArtikelVelde мой UserControl
)
Время выполнения все еще работает
Мой статический EF Repositoy класс:
public class BSManagerData
{
private static BSManagerEntities _entities;
public static BSManagerEntities Entities
{
get
{
if (_entities == null)
_entities = new BSManagerEntities();
return _entities;
}
set
{
_entities = value;
}
}
}
Некоторая логика происходит в моем UserControl для загрузки данных в выпадающие списки:
private void LaadCbx()
{
cbxCategorie.DataSource = (from c in BSManagerData.Entities.Categories
select c).ToList();
cbxCategorie.DisplayMember = "Naam";
cbxCategorie.ValueMember = "Id";
}
private void cbxCategorie_SelectedIndexChanged(object sender, EventArgs e)
{
cbxFabrikant.DataSource = from f in BSManagerData.Entities.Fabrikants
where f.Categorie.Id == ((Categorie)cbxCategorie.SelectedItem).Id
select f;
cbxFabrikant.DisplayMember = "Naam";
cbxFabrikant.ValueMember = "Id";
}
Единственный способ заставить мои формы работать снова, время разработки, это закомментировать часть EF в UserControl (см. Выше) и перестроить. Это очень странно, все в одной сборке, в одном пространстве имен (для простоты).
Есть идеи?
3 ответа
Похоже, вы выполняете код базы данных в режиме разработки. Чтобы предотвратить это, выследите элемент управления и метод, вызывающий это, и используйте:
if (DesignMode)
return
Также очень плохая идея статически кешировать контекст базы данных. Это вызовет проблемы с многопоточностью, а также когда вы делаете вставки и удаления. Контекст базы данных предназначен для использования для одной "единицы работы", это добавление 2, удаление 3 других объектов и вызов SaveChanges
один раз.
Я столкнулся с той же проблемой,
В моем случае я добавил некоторые коды базы данных в событие загрузки пользовательского элемента управления, которые использовали некоторые библиотеки, которые не были загружены до времени выполнения.
Следовательно, желательно не записывать какой-либо код базы данных в событие загрузки пользовательского элемента управления.
Надеюсь, это поможет вам!
Эта ошибка отображается, если вы вызываете функцию "LaadCbx()" в конструкторе userControl.
потому что инициализация в рамках сущности существует в этой функции.
решение состоит в том, чтобы вызвать эту функцию "LaadCbx()" в конструкторе родительской формы.