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()" в конструкторе родительской формы.

Другие вопросы по тегам