EF в UserControl не может видеть app.config? - PullRequest
6 голосов
/ 13 марта 2010

Я только что создал пользовательский элемент управления. Этот элемент управления также использует мой статический класс Entity Framework для загрузки двух комбинированных списков. Все хорошо и работает без проблем. Дизайн и время работы работают. Затем, когда я останавливаю приложение, все формы, которые содержат мой UserControl, больше не работают во время разработки. Я просто вижу две ошибки:

Error1: Указанное именованное соединение либо не найдено в конфигурации, не предназначено для использования с поставщиком EntityClient, либо недопустимо.

Ошибка 2: Переменная ccArtikelVelden либо необъявлена, либо никогда не назначалась. (ccArtikelVelde мой UserControl)

Во время выполнения все еще работает

Мой статический EF Репозитой, класс:

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 ]

9 голосов
/ 13 марта 2010

Похоже, вы выполняете код базы данных в режиме разработки. Чтобы предотвратить это, выследите элемент управления и метод, вызывающий это, и используйте:

if (DesignMode)
    return

Также очень плохая идея статически кэшировать контекст базы данных. Это вызовет проблемы с многопоточностью, а также когда вы делаете вставки и удаления. Контекст базы данных предназначен для использования в качестве одной «единицы работы», он добавляет 2, удаляет 3 других объекта и вызывает SaveChanges один раз.

2 голосов
/ 07 апреля 2011

Я столкнулся с той же проблемой,

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

Поэтому желательно не записывать какой-либо код базы данных в событии загрузки пользовательского элемента управления.

Надеюсь, это вам поможет!

0 голосов
/ 08 ноября 2015

эта ошибка отображается, если вы вызываете функцию "LaadCbx ()" в конструкторе userControl.

потому что в этой функции существует инициализация на платформе сущностей.

решение состоит в том, чтобы вызвать эту функцию "LaadCbx ()" в конструкторе родительской формы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...